Уровень абстракции базы данных
Позволяет выполнять один программный код на разных СУБД.
Гибкий уровень абстракции Друпал позволяет легко работать с различными типами баз данных, например MySQL или PGSQL. Он максимально сохраняет синтаксис и мощь SQL, изменяя отдельные параметры запросов для разных типов баз и оставляя основные элементы безопасности неизменными.
Большинство обращений к базам данных выполняется с помощью функций db_query() или
db_query_range(). Разработчикам стоит также обратить внимание на функцию pager_query(), которая используется в случае запросов, результаты которых нужно будет вывести постранично, и функцию tablesort_sql(), которая формирует запросы для сортируемых таблиц.
Например, нужно вывести список последних 10 статей определенного пользователя. Вместо прямого выполнения SQL-запроса
SELECT n.title, n.body, n.created FROM node n WHERE n.uid = $uid LIMIT 0, 10;
можно вызвать функцию Drupal:
$result = db_query_range('SELECT n.title, n.body, n.created FROM {node} n WHERE n.uid = %d', $uid, 0, 10); while ($node = db_fetch_object($result)) { // Совершить какие-то операции над $node->body, и т.д. }
Фигурные скобки вокруг 'node' применяются для автоподстановки префиксов таблиц, которую делает функция db_prefix_tables(). Параметр uid вставляется в запрос через заменитель '%d' и аргумент функции ($uid), что предотвращает SQL-инъекцию, возможною при подаче в $uid вредоносного значения.
Синтакс SQL-конструкции LIMIT зависит от конкретной СУБД, поэтому, следует использовать функцию db_query_range() для получения соответствующей функциональности.
И наконец, для получения и работы с результатом, преимущественно используйте db_fetch_object().
Константы
| Имя | Описание |
|---|---|
| DB_QUERY_REGEXP includes/database.inc | Определяет символы-заполнители, которые должны быть заменены в _db_query_callback(). |
Функции
| Имя | Описание |
|---|---|
| db_affected_rows includes/database.mysql.inc | Возвращает количество записей, изменённых предыдущим запросом. |
| db_check_setup includes/database.pgsql.inc | Проверяет, корректно ли настроена база данных. |
| db_column_exists includes/database.mysql.inc | Проверяет наличие колонки в данной таблице. |
| db_connect includes/database.mysql.inc | Инициализирует соединение с базой данных. |
| db_decode_blob includes/database.mysql.inc | Возвращает текст из BLOB-значения. В случае с PostgreSQL, перекодирует данные после выборки из bytea-полей. |
| db_distinct_field includes/database.mysql.inc | Оборачивает данное поле таблицы в 'DISTINCT()'. Функция добавляет эту обвертку в 'SELECT' запроса и возвращает измененный запрос. Эта функция применяется только если 'DISTINCT' еще не присутствует в запросе. |
| db_encode_blob includes/database.mysql.inc | Возвращает корректно-отформатированнное BLOB значение. В случае с PostgreSQL, кодирует данные в bytea-поле. |
| db_error includes/database.mysql.inc | Определяет, возратил ли ошибку предыдущий запрос. |
| db_escape_string includes/database.mysql.inc | Подготавливает пользовательские данные для использования в SQL-запросе. Предотвращает SQL-инъекции. Примечание: Эта функция работает с PostgreSQL 7.2 или выше. |
| db_escape_table includes/database.inc | Ограничивает использование служебных символов в названиях динамических таблиц и столбцов. |
| db_fetch_array includes/database.mysql.inc | Выбирает одну запись из результата предыдущего запроса и представляет ее как массив. |
| db_fetch_object includes/database.mysql.inc | Выбирает одну запись из результата предыдущего запроса и представляет ее как объект. |
| db_is_active includes/database.inc | Определяет доступность базы данных. Возвращает булевское значение TRUE или FALSE. |
| db_lock_table includes/database.mysql.inc | Блокирует таблицу. Эта функция автоматически начинает транзакцию БД. |
| db_placeholders includes/database.inc | Генерирует заполнители для аргументов запроса одного типа. |
| db_prefix_tables includes/database.inc | Добавляет префиксы (если нужно) ко всем таблицам запроса. |
| db_query_range includes/database.mysql.inc | Выполняет ограниченный диапазоном запрос к активной базе данных. |
| db_query_temporary includes/database.mysql.inc | Выполняет SELECT-запрос к активной базе данных и сохраняет результат во временной таблице. |
| db_result includes/database.mysql.inc | Возвращает одиночное поле результата из предыдущего запроса. |
| db_rewrite_sql includes/database.inc | Изменяет первоначальные запросы нодов, таксономии и комментариев. Часто используется для формирования списков. |
| db_set_active includes/database.inc | Активирует базу данных для последующих запросов. |
| db_status_report includes/database.mysql.inc | Возвращает отчёт о состоянии базы данных. |
| db_table_exists includes/database.mysql.inc | Проверяет, существует ли таблица. |
| db_unlock_tables includes/database.mysql.inc | Разблокирует все заблокированные таблицы. Эта функция автоматически завершает транзакцию. |
| db_version includes/database.mysql.inc | Возвращает версию используемого сервера баз данных. |
| pager_query includes/pager.inc | Выполняет «постраничный» запрос к базе данных. |
| tablesort_sql includes/tablesort.inc | Создает сортировочную часть SQL запроса. |
| update_sql includes/database.inc | Выполняет SQL-запрос и возвращает статус результата. Используется преимущественно в hook_update_N() и остальных функциях инсталяции/обновления модулей. |
| _db_error_page includes/database.inc | Вспомогательная функция для показа фатальных ошибок в базе данных. |
| _db_query includes/database.mysql.inc | Вспомогательная функция для db_query(). |
| _db_query_callback includes/database.inc | Вспомогательная функция для db_query(). |
| _db_rewrite_sql includes/database.inc | Вспомогательная функция для db_rewrite_sql(). |
