Drupal Database API(Общие понятия)

В Drupal слой для работы с базой данных работает поверх библиотеки PDO языка PHP. PDO обеспечивает единый, объектно-ориентированный API для доступа к различным базам данных, но он не обеспечивает абстракцию для разных диалектов SQL, используемых различными базами данных.

Драйверы

Из-за различных баз данных требуются различные виды взаимодействия, для слоя базы данных Drupal требуется драйвер для каждого типа базы данных.Драйвер состоит из ряда файлов, расположенных в includes/database/driver, где driver это строка, представляющую уникальный ключ для этого драйвера. В большинстве случаев ключ драйвера это имя версии базы данных внижнем регистре , такие, как "mysql", "pgsql", или "mycustomdriver".

Каждый драйвер состоит из нескольких классов, производных от родительских классов в ядре системы базы данных. Эти определенные для драйвера классы могут переопределить все действия необходимые для правильной поддержки нужного типа базы данных. Классы определенные для драйвера всегда именуются по родительским классам, затем следует символ подчеркивания и название драйвера. Например, версия InsertQuery для MySQL названа InsertQuery_mysql.

Соединения

Соединение это объект класса DatabaseConnection, который наследуется от класса PDO. Каждый база данных, с которой Drupal соединяется имеет один объект соединения, связанный с ним. Этот объект соединения должен быть подклассом для каждого отдельного драйвера.

Чтобы получить доступ (и открыть, если необходимо) к объекту соединения используются:

	$conn = Database::getConnection($target, $key);

Для получения дополнительной информации о цели(Target) и ключе подключения, пожалуйста, обратитесь к документации на странице конфигурации базы данных.

Чтобы получить доступ к активному в данный момент соединению, используйте:

		$conn = Database::getConnection();

это вернет цель(target) по умолчанию активного соединения.

Отметим, что в подавляющем большинстве случаев вам не нужно будет просить подключение объекта непосредственно. Скорее всего, процедурные обертки сделают это за вас. Единственная причина, по которой вам когда-нибудь понадобится получить доступ к объекту соединения напрямую это, если вы делаете сложные манипуляции более чем с одной базой данных, и вы не хотите, чтобы менять активную базу данных.

Чтобы установить активное соединение, используйте:

		db_set_active($key);

В следующем разделе, конфигурации базы данных, для детального обзора ключа соединения и цели соединения.

Запросы

Запрос это SQL-оператор , который будет отправлен на подключение к базе данных. Есть шесть типов запросов, поддерживаемых базой данных системы: статические, динамические, вставки, обновления, удаления и слияния. Некоторые запросы пишутся так, как строки шаблонов SQL(подготовленные операторы), тогда как другие используют объектно-ориентированного построитель запросов."Объект запроса" относится к экземпляру построителя запросов для одного из различных типов запросов.

Операторы

Объект оператора является результатом Select запроса. Он всегда будет являться типом DatabaseStatement, или, возможно, подклассом DatabaseStatement. DatabaseStatement расширяет класс PDOStatement.

Drupal использует подготовленные операторы для всех запросов.Подготовленный запрос является шаблоном для запроса, в котором значения будут вставлены для исполнения. Считайте заранее подготовленное оператор как эквивалент SQL-функции, которая затем вызывается с параметрами для использования.

Обычно в PDO надо явно подготовить объект оператора, а затем выполнить его с определенными значениями связанными с заполнителями в запросе. Оператор может быть набором результатов. Эффективный оператор и набор результатов являются синонимами, но только после того, как оператор был выполнен.

Drupal не предоставляет подготовленный оператор напрямую. Вместо этого, разработчик модуля будет использовать объект запроса или одноразовые SQL строки для выполнения запроса и объект оператора для этого запроса возвращается. Термин "объект оператора" и "результирующий набор объектов", следовательно, являются более или менее синонимами.

оригинал

Тэги:

Тэг в списке: