Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Работа с БД Amiro.CMS

Для работы с базой данных, в API Amiro.CMS предусмотрен специальный набор классов.
В виду особенностей реализации системы, для достижения максимальной эффективности, безопасности, работы системных служб (кеширование, система прав, индексация и многое другое), все прямые обращения к БД необходимо выполнять исключительно посредством этих классов.

Внимание

Для работы с записями БД в контексте модулей Amiro.CMS настоятельно рекомендуется работать с моделями.
Прямые запросы к базе данных производить только в том случае, когда сложность запроса не позволяет выполнить данную операцию используя возможности модели модуля.

AMI_DB - базовый класс работы с БД.

Получение объекта работы с БД:

$oDB = AMI::getSingleton('db');

Выполнение запросов с использованием AMI_DB:

МетодОписание
AMI_DB:selectВыполнение запроса выборки из БД
AMI_DB:queryВыполнение запроса к БД

В качестве обязательного параметра данные методы ожидают объект DB_Snippet, далее будем называть его сниппетом.

Сниппет - объект, содержащий строку запроса или ее часть, подготовленную для безопасного использования.

Получение сниппета:

DB_Query::getSnippet($queryStr);

Здесь $queryStr - строка запроса, в которой все данные, которые необходимо передать в запрос заменены строкой %s.

Данные должны быть переданы в сниппет с помощью следующих методов:

МетодОписание
DB_Snippet::q($value)Передает в сниппет строковое значение
DB_Snippet::plain($value)Передает в сниппет неквотируемое значение
DB_Snippet::implode($aValues)Передает в сниппет массив для операций с набором данных

Например, для выполнения запроса

SELECT name, description FROM my_table WHERE text_field = 'value' AND time_field < NOW() AND id NOT IN (3, 5, 6, 9);

сниппет можно получить следующим образом

/**
 * @var DB_Snippet
 */
$oSnippet
    DB_Query::getSnippet("SELECT name, description FROM my_table WHERE text_field = %s AND time_field < %s AND id NOT IN (%s)")
        ->q('value')
        ->plain('NOW()')
        ->implode(array(3, 5, 6, 9));

Результатом выполнения этого запроса будет объект DB_Recordset, либо false в случае ошибки.

/**
 * @var DB_Recordset
 */
$oRecordset = AMI::getSingleton('db')->select($oSnippet);

Объект $oRecordset - итератор, каждый элемент которого это массив содержащий один ряд результата запроса.

if($oRecordset !== false){
    foreach($oRecordset as $aRow){
        list($name, $description) = $aRow;
    }
}
Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2021 © Amiro.CMS Все права защищены.