ertttert
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)) ;
Когда дело дойдет до выполнения в базе данных, эта строка примет следующий вид: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. Первым параметром функции
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 | |