В прошлый раз, в рамках данной темы я описал несколько классов, которые используются в главном классе fsDBTable, о котором мы сегодня и поговорим…
Главным преимуществом класса fsDBTable является автоматическое создание внутренней структуры таблицы базы данных, что позволят избежать лишние временные затраты, а использование кеширования позволяет значительно ускорить время выполнения скриптов. Однако любые изменения в структуре таблицы базы данных должны сопровождаться очисткой кеша (если он есть), для его обновления.
Допустим у нас есть две таблицы:
users | ||
---|---|---|
id | fio | age |
1 | Иванов Иван Иванович | 18 |
2 | Петров Петр Петрович | 28 |
posts | ||
---|---|---|
id | id_user (users:fio:id#Комментарий к столбцу) | text |
1 | 1 | Текст |
Примечание: В скобках указан комментарий к столбцу id_user.
Для создания объекта fsDBTable для данных структур можно воспользоваться двумя способами:
//Способ 1 $u = new fsDBTable("users"); //Способ 2 class posts extends fsDBTable { /* Здесь могут быть новые методы */ } $p = new posts();
Структура класса
class fsDBTable { //Атрибуты /* Все столбцы таблицы Например для таблицы users public $id; //string public $fio; //string public $age; //string */ public $result; //fsStruct, результат запроса public $inserted_id //int, номер добавленной записи public $affected_rows //int, количество затронутых строк public $sql; //string, текущий запрос public $current; //int, ключ выбранной запись public $columns_count; //int, количество столбцов в таблице public $columns; //array, имена столбцов таблицы //Методы public __construct($TableName = string, $FromCache = bool, $CreateCache = bool); //Конструктор public delete(); //определение команды DELETE public insert(); //определение команды INSERT public update($fileds = array, $values = array); //определение команды UPDATE public select($fileds = mixed, $use_links = bool); //определение команды SELECT public where($where = mixed); //определение WHERE условия запроса public order($fields = array, $desc = false); //определение ORDER BY условия запроса public limit($first = int, $count = int); //определение LIMIT условия запроса public group($fields = array); //определение GROUP BY условия запроса public next($step = int); //переход к следующей строке результата выборки public save(); //сохранение изменений записи, полученной использованием атрибута current public execute($sql = string, $fetch_assoc = bool); //выполнение запроса public executeToArray($sql = string); //array, выполнение запроса и возвращение результата в виде массива public GetAll($useLinks = false, $order = array()); //выборка всех данных таблицы public GetOne($key_value = mixed, $key_field = string); //выборка одной строки таблицы public GetCount($where = mixed); //возвращает число записей с данным условием public unique($value = string, $key = string, $return = mixed); //проверяет запись на уникальность public link($field = string); //возвращает значение связанного столбца public generate_query(); //генерирует запрос на основании команд конструктора запросов public GetType($field = string); //возвращает тип указанного поля }
Описывать каждую функцию подробно, думаю нет смысла, так как большая часть из них интуитивно понятна, поэтому мы подробно рассмотрим лишь их часть.
Атрибут result
Тип fsStruct. Результат выполнения последнего запроса select. Хранит все столбцы таблицы, а так же _mysql_result — результат выполнения запроса, _mysql_row — массив полученный командой fetch_assoc.
Функция execute
Производит выполнение запроса к базе данных, имеет два необязательных параметра.
$query = string, запрос который необходимо выполнить, если пусто, то берется запрос из конструктора запроса (по умолчанию «»);
$fetch_assoc = bool, флаг указывающий необходимо ли после запроса выполнять выборку первой строки результата (по умолчанию true).
$u->execute("SELECT * FROM `users`"); echo $u->result->age; //18 $u->execute("SELECT * FROM `users`", false); echo $u->result->age; //Пусто $u->next(); echo $u->result->age; //18 $u->execute("SELECT * FROM `users`", false); $u->next(2); echo $u->result->age; //28 $u->execute("SELECT * FROM `users`", false); while ($u->next()) { echo $u->result->age.'-'; echo $u->result->_mysql_row['age'].'-'; } //18-18-28-28-
Функция select
Задает конструктору запроса установить команду выборки данных из таблицы. Принимает два параметра.
$fields — string (доступно только значение «*») или array с названиями столбцов для выборки (по умолчанию «*») ;
$use_links — bool, флаг задающий условие выборки значения связанного поля (по умолчанию false).
$p->select()->execute(); echo $p->result->id.' = '.$p->result->text; //1 = Текст $p->select(array('id'))->execute(); echo $p->result->id.' = '.$p->result->text; //1 = $p->select()->limit(1)->order(array('text'))->execute('', false); echo $p->result->id.' = '.$p->result->text; //Пусто $p->next(); echo $p->result->id.' = '.$p->result->text; //1 = Текст $p->select("*", true)->execute(); echo $p->result->id_user.' = '.$p->link('id_user'); //(1 = Иванов Иван Иванович)
Функция insert
Задает конструктору запроса установить команду добавления данных в таблицу. Все значения для добавления берутся из атрибутов класса.
//считаем что поле id в таблице users установлено как auto_increment $u->fio = "Сидоров Сидор Сидорович"; $u->age = 100; $u->insert()->execute(); echo $u->inserted_id; //3 $u->delete()->where("`id` = '".$u->inserted_id."'")->execute(); //удалили только что добавленную запись echo $u->affected_rows; //1
Атрибут current
Устанавливает внутренние состояние объекта, как будто была выполнена команда SELECT с выборкой по первичному ключу с заданным значением. При этом данные выборки сохраняются как в результат запроса, так и в атрибуты объекта. Атрибут работает только при наличии primary key в таблице.
$u->current = 2; echo $u->result->age.' '.$u->id; //28 2 $u->age = 15; $u->save(); //теперь у записи с id = 2 значение age = 15