ertttert
Books-CMS.clan.su

Выполнение простых запросов

Функция Drupal db_query() используется для выполнения запроса SELECT в активном подключении к базе данных. Имеются другие функции для выполнения запросов INSERT, UPDATE и DELETE — они будут описаны чуть ниже, а пока мы рассмотрим выборку информации из базы данных. При написании SQL-запросов необходимо знать синтаксис, специфичный для Drupal. Первым делом, имена таблиц заключаются в фигурные скобки, чтобы при необходимости к ним можно было добавлять префиксы и получать уникальные имена. Это соглашение позволяет пользователям, у которых количество создаваемых баз данных ограничено их поставщиком хостинга, инсталлировать Drupal в существующих базах данных и все-таки избежать конфликтов имен таблиц, указывая префиксы баз в файле settings.php. Вот пример простого запроса — выборки имени для роли 2:
$result = db_query('SELECT name FROM {role} WHERE rid = :rid', array(':rid' => 2));
Обратите внимание на применение :rid в качестве именованного заполнителя. В Drupal запросы всегда пишутся с заполнителями, а конкретные значения указываются в парах ключ => значение. Заполнитель :rid автоматически заменяется на значение, присвоенное ему в массиве, который используется для определения всех значений, назначенных заполнителям в запросе — в данном случае 2. Другие заполнители означают дополнительные параметры:
db_query('SELECT name FROM {role} WHERE rid > :rid AND rid < :max_rid', array(':rid' => 0, ':max_rid' => 3));
Когда дело дойдет до выполнения в базе данных, эта строка примет следующий вид:
SELECT FROM role WHERE rid > 0 and rid < 3
Данные, введенные пользователем, всегда следует передавать как отдельные параметры, чтобы можно было выполнить очистку этих значений и тем самым защититься от атак внедрением SQL. Первым параметром функции db_query() всегда является сам запрос. Остальные параметры — это динамические значения для проверок и вставок в строку запроса. Эти значения передаются в виде массива пар ключ => значение. Данный синтаксис переводит константы TRUE, FALSE и NULL в их десятичные эквиваленты (0 или 1). В большинстве случаев это не приводит к каким-либо проблемам. Рассмотрим несколько примеров. В этих примерах мы используем таблицу базы данных по имени joke, которая содержит три поля: идентификатор ноды nid (целое число), идентификатор версии vid (целое число) и текстовое поле punchline, содержащее кульминационный момент шутки (дополнительные сведения относительно модуля joke ищите в главе 7). Начнем с простого запроса. Нужно получить все строки со всеми полями из таблицы joke, в которых поле vid содержит значение $node->vid:
db_query('SELECT * FROM {joke} WHERE vid = :vid', array(':vid' => $node->vid));
Теперь вставим в таблицу joke новую строку с помощью функции db_insert. Вставляемые поля указываются конструкцией ->fields и массивом пар ключ => значение, где ключи содержат имена полей, а значения — данные, вставляемые в поля новой строки. Обратите также внимание на конструкцию ->execute() в конце оператора, которая как раз и выполняет вставку в базу данных.
$nid = db_insert('joke')
->fields(array(
 'nid' => '4',
 'vid' => 1,
 'punchline' => 'And the pig said oink!',
))
->execute();
Теперь обновим все строки в таблице joke: занесем кульминационный момент 'Take my wife please!' во все строки, где nid больше или равен 3. Массив полей и значений для замены будет передан с помощью конструкции ->fields, а условие для изменения значений — с помощью модификатора ->condition:
$num_updated = db_update('joke')
->fields(array(
 'punchline' => 'Take my wife please!',
))
->condition('nid', 3, '>=')
->execute();
Если необходимо узнать количество строк, на которые повлияло обновление, после выполнения обновления можно воспользоваться значением, присвоенным переменной $num_updated. А теперь удалим из таблицы joke все строки с кульминационным моментом 'Take my wife please!'. Для этого понадобится функция db_delete с модификатором ->condition, позволяющим указать условия удаления записей:
$num_deleted = db_delete('joke')
->condition('punchline', 'Take my wife please!')
->execute();
Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz