This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.
При работе с базой данных следует использовать экземпляр класса kDBConnection доступный через атрибут Conn почти у каждого класса. В общем случае это выглядит так:
$result = $this->Conn->MethodName($params);
Вместо MethodName можно использовать методы описанные далее. Универсальная проверка на присутствие данных в ответе на запрос может выглядеть так:
if($result){// код будет выполнен только в случае удачного// завершения запроса и при наличии данных}
При изменении данных в базе в ручную не забывайте изменять данные в связанных таблицах, иначе может нарушится целостность данных (data integrity) в базе.
Выборка данных из базы
название метода
описание метода
GetOne(mixed)
Возвращает первое поля первого ряда из запроса.
GetRow(array)
Возвращает первый ряд запроса.
GetCol(array)
Возвращает первую колонку из запроса.
Query(array)
Выбирает все записи из базы под данному sql запросу.
При неудачной выборке будет возвращён false или пустой массив.
Обработка результатов запроса
название метода
описание метода
getInsertID(int)
Получить ID (из колонки autoincrement типа) от последней вставленной записи.
getAffectedRows(int)
Вернуть количество рядов, которые изменил/выбрал запрос.
qstr(string)
Экранировать строку для вставки в sql запрос (также ставит апострофы вокруг строки).
TableFound(boolean)
Узнать есть-ли таблица в базе данных.
Изменение данных в базе
название метода
описание метода
doInsert
Вставит данные из ассоциативного массива.
doUpdate
Обновить данные из ассоциативного массива.
Добавление колонок в таблицу
При добавлении колонок в таблицы следует придерживаться следующих правил в указании опций колонок исходя из содержания будущей колонки:
сумма (деньги) - тип DECIMAL(10,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.
Использование слова NULL
Если, и только если, требуется знать факт отсутствия значения в колонке, то её надо создавать, как NULL. Во всех остальных случаях колонка должна быть NOT NULL.
Все колонки типов TINYTEXT, TEXT, LONGTEXT должны быть NULL без DEFAULT значения (требование в MySQL5).
Использование слова UNSIGNED
Если присутствует 100% уверенность в том, что в колонке не может быть отрицательных значений, то колонку нужно делать UNSIGNED. Колонки, где храниться timestamp нельзя делать UNSIGNED в тех случаях, когда
в колонке с датой может быть дата меньше 1 января 1970 года;