Позволяет выполнять один программный код на разных СУБД.
Гибкий уровень абстракции Друпал позволяет легко работать с различными типами баз данных, например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().
Оборачивает данное поле таблицы в 'DISTINCT()'. Функция добавляет эту обвертку в ‘SELECT’ запроса и возвращает измененный запрос. Эта функция применяется только если ‘DISTINCT’ еще не присутствует в запросе.
Подготавливает пользовательские данные для использования в SQL-запросе. Предотвращает SQL-инъекции. Примечание: Эта функция работает с PostgreSQL 7.2 или выше.
Выполняет SQL-запрос и возвращает статус результата. Используется преимущественно в hook_update_N() и остальных функциях инсталяции/обновления модулей.