K4:Работа с базой данных
From In-Portal Developers Guide
m (1 версия) |
(→Добавление колонок в таблицу) |
||
| Line 55: | Line 55: | ||
* сумма (деньги) - тип '''<code>DECIMAL(10,2)</code>''' и '''<code>NOT NULL</code>''' | * сумма (деньги) - тип '''<code>DECIMAL(10,2)</code>''' и '''<code>NOT NULL</code>''' | ||
* дата (timestamp) - тип '''<code>INT(11)</code>''' и '''<code>NULL</code>''' | * дата (timestamp) - тип '''<code>INT(11)</code>''' и '''<code>NULL</code>''' | ||
| - | * короткий текст (имя/фамилия) - '''<code>VARCHAR(255)</code>''' и '''<code>NOT NULL</code>''' | + | * короткий текст (имя/фамилия, до 8KB) - '''<code>VARCHAR(255)</code>''' и '''<code>NOT NULL</code>''' |
| - | * текст средней длинны (описание, от | + | * текст средней длинны (описание, от 8KB байт и до 64KB) - '''<code>TEXT</code>''' и '''<code>NULL</code>''' |
* длинный текст (описание, от 64KB и до 4MB) - '''<code>LONGTEXT</code>''' и '''<code>NULL</code>''' | * длинный текст (описание, от 64KB и до 4MB) - '''<code>LONGTEXT</code>''' и '''<code>NULL</code>''' | ||
Revision as of 09:54, 14 March 2015
| ||
|---|---|---|
| Статьи в этой категории | ||
|
Contents |
При работе с базой данных следует использовать экземпляр класса 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 года;
- в колонке находиться только время (без даты).
