Слой абстракции базы данных

Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

Позволяет использование разных типов СУБД, используя один программный код.

Друпал имеет упрощенный уровень абстракции данных и предоставляет возможность разработчикам легко работать сразу с несколькими типами серверов баз данных (например: 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().
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему