Слой абстракции базы данных
Позволяет использование разных типов СУБД, используя один программный код.
Друпал имеет упрощенный уровень абстракции данных и предоставляет возможность разработчикам легко работать сразу с несколькими типами серверов баз данных (например: MySQL или PGSQL). Этот метод позволяет сохранить синтаксис и мощь SQL, на сколько это только возможно, и в тоже время запросы друпал будет формировать разным серверам по-разному, и это помогает защищать данные, хранящиеся в 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_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_lock_table includes/database.mysql.inc | Блокирует таблицу. Эта функция автоматически начинает транзакцию БД. |
db_next_id includes/database.mysql.inc | Возвращает новый уникальный ID для данной таблицы. |
db_num_rows includes/database.mysql.inc | Возвращает количество записей, найденных предыдущим запросом. |
db_prefix_tables includes/database.inc | Добавляет префиксы (если нужно) ко всем таблицам запроса. |
db_query includes/database.inc | Runs a basic query in the active database. |
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 запроса. |
_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(). |