5.1. Работа с базой данных
При работе с базой данных следует использовать экземпляр класса kDBConnection доступный через
атрибут Conn почти у каждого класса. В общем случае это выглядит так:
$result = $this->Conn->MethodName($params);
Вместо MethodName можно использовать методы описанные далее. Универсальная проверка на присутствие
данных в ответе на запрос может выглядеть так:
if ($result) {
// код будет выполнен только в случае удачного
// завершения запроса и при наличии данных
}
Осторожно
При изменении данных в базе в ручную не забывайте изменять данные в связанных таблицах, иначе может нарушится целостность данных (data integrity) в базе.
5.1.1. Выборка данных из базы
название метода |
описание метода |
|---|---|
| GetOne (mixed) | Возвращает первое поля первого ряда из запроса. |
| GetRow (array) | Возвращает первый ряд запроса. |
| GetCol (array) | Возвращает первую колонку из запроса. |
| Query (array) | Выбирает все записи из базы под данному sql запросу. |
При неудачной выборке будет возвращён false или пустой массив.
5.1.2. Обработка результатов запроса
название метода |
описание метода |
|---|---|
| getInsertID (int) | Получить ID (из колонки autoincrement типа) от последней вставленной записи. |
| getAffectedRows (int) | Вернуть количество рядов, которые изменил/выбрал запрос. |
| qstr (string) | Экранировать строку для вставки в sql запрос (также ставит апострофы вокруг строки). |
| TableFound (boolean) | Узнать есть-ли таблица в базе данных. |
5.1.3. Изменение данных в базе
название метода |
описание метода |
|---|---|
| doInsert | Вставит данные из ассоциативного массива. |
| doUpdate | Обновить данные из ассоциативного массива. |
5.1.4. Добавление колонок в таблицу
При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки:
сумма (деньги) - тип
DECIMAL(20,2)иNOT NULLдата (timestamp) - тип
INT(11)иNULLкороткий текст (имя/фамилия, до 8KB) -
VARCHAR(255)иNOT NULLтекст средней длинны (описание, от 8KB байт и до 64KB) -
TEXTиNULLдлинный текст (описание, от 64KB и до 4MB) -
LONGTEXTиNULL
В следующих случаях нужно всегда ставить INDEX на колонку:
колонка содержит дату;
колонка содержит статус записи, напр.
Active/Disabled;колонка указывает на то, что запись основная, т.е.
IsPrimary;по колонке будет делаться сортировка и колонка цифровая, напр.
Order,Priority;по колонке может быть сделать
JOIN;колонка является
ForeignKey.
Примечание
В каждой таблице должен быть основной ключ (primary key). Этот ключ всегда должен
состоять из одной цифровой колонки и не должен быть UNSIGNED.
Значение по умолчанию
Значение по умолчанию должно явно указано в декларации поля добавлением DEFAULT ... части в SQL.
Использование слова NULL
Если, и только если, требуется знать факт отсутствия значения в колонке, то её надо создавать, как NULL.
Во всех остальных случаях колонка должна быть NOT NULL.
Примечание
Все колонки типов TINYTEXT, TEXT, LONGTEXT должны быть NULL без DEFAULT значения (требование в MySQL5).
Использование слова UNSIGNED
Если присутствует 100% уверенность в том, что в колонке не может быть отрицательных значений, то
колонку нужно делать UNSIGNED. Колонки, где храниться timestamp нельзя делать UNSIGNED в
тех случаях, когда
в колонке с датой может быть дата меньше 1 января 1970 года;
в колонке находиться только время (без даты).
См. также