SlideShare uma empresa Scribd logo
1 de 14
Работа с БД в Drupal 7

Поддерживаемые СУБД
MySQL (> 90% сайтов)
PostgreSQL
SQLite
MSSQL и Oracle (дополнительный модули)


Способы работы с БД
Plain SQL queries
PDO (PHP Data objects)
Настройка подключения к БД


В файле /sites/default/settings.php
$databases = array (
  'default' => //connection
  array (
    'default' => //target
    array (
      'database' => 'drupal7db',
      'username' => 'root',
      'password' => 'secret',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);
Выполнение запросов SELECT
Plain SQL
$nodes = db_query(
 "SELECT nid, title
  FROM {node}
  WHERE type = :type
     AND uid = :uid",
 array(':type' => 'page', ':uid' => 1));
PDO
$nodes = db_select('node', 'n')
 ->fields('n', array('nid', 'title'))
 ->condition('n.type', 'page')
 ->condition('n.uid', 1)
 ->execute();
Обходим полученные записи
foreach ($nodes as $node) {
  $items[$node->nid] = $node->title;
}
Запрос SELECT
                 с INNER JOIN, LIMIT и ORDER BY
Plain SQL
$result = db_query(
"SELECT n.title, u.name
 FROM {node} n
  INNER JOIN {users} u ON n.uid = u.uid
 ORDER BY title DESC
 LIMIT 0, 10");
PDO
$query = db_select('node', 'n')
 ->innerJoin('users', 'u', 'n.uid = u.uid')
 ->fields('n', array('title'))
 ->fields('u', array('name'))
 ->orderBy('n.title', 'DESC')
 ->range(0, 10)
 ->execute();
Запрос SELECT для получение количества записей


Plain SQL
$count = db_query(
 "SELECT COUNT(*) FROM {node}")
->fetchField();
PDO вариант 1
$count = db_select('node')
 ->countQuery()
 ->execute()
 ->fetchField();
PDO вариант 2
$count = db_select('node')
 ->addExpression('COUNT(*)')
 ->execute()
 ->fetchField();
Запрос SELECT со сложными условиями WHERE

Plain SQL
$nodes = db_query(
"SELECT *
 FROM {node}
 WHERE title LIKE :title
  AND (uid = :uid OR status = :status)",
array(':title' => '%' . db_like('somestring') . '%', ':uid' => 1, ':status' => 0));
PDO
$nodes = db_select('node', 'n')
->fields('n')
->condition('n.title', '%' . db_like('somestring') . '%', 'LIKE')
->condition(
  db_or()
   ->condition('n.uid', 1)
   ->condition('n.status', 0)
)
->execute();
Варианты получения результатов запроса SELECT


по-умолчанию - массив объектов
fetchAllKeyed() - ассоциативный массив
fetchAllAssoc($key) - ассоциативный массив сгрупированный по
указанному полю
fetchCol() - массив значений одной колонки
fetchField() - единичное значение поля
rowCount() - кол-во строк таблицы затронутых запросом
getQueryString() - сформированный SQL-запрос
UPDATE — запросы на обновление значений

Plain SQL (не рекомендуется)
db_query(
 "UPDATE {node}
  SET status = :status
  WHERE nid = :nid",
array(':status' => 1, ':nid' => 123));


PDO
db_update('node')
 ->fields(array('status' => 1))
 ->condition('nid', 123)
 ->execute();
INSERT — запросы на
                            вставку значений
Plain SQL
db_query(
"INSERT INTO {mytable} (intvar, stringvar, floatvar)
  VALUES (:int, :string, :float)",
array(':int' => 1, ':string' => 'somestring', ':float' => 3.14));
PDO
db_insert('mytable')
 ->fields(array('intvar' => 5, 'stringvar' => 'somestring', 'floatvar' => 3.14))
 ->execute();
DELETE — запросы на удаление значений

Plain SQL
db_query(
"DELETE FROM {node}
 WHERE uid = :uid AND created < :created",
array(':uid' => 1, ':created' => time() - 3600));


PDO
db_delete('node')
 ->condition('uid', 1)
 ->condition('created', time() - 3600, '<')
 ->execute();
Специальные таблицы


Variables — хранение настроек модулей
variable_set($name, $value)
variable_get($name, $default = NULL)
variable_del($name)


Cache, Cache_* — хранение кеша
cache_set($cid, $data, $bin = 'cache', $expire = CACHE_PERMANENT)
cache_get($cid, $bin = 'cache')


Node, User и другие объекты
вставлять, обновлять или удалять нужно только с помощью API
Расширенные возможности

Работа с несколькими БД

Master/Slave репликация

Поддержка транзакций
Ссылки на подробную информацию


http://api.drupal.org/api/drupal/includes!database!database.inc/
group/database/7

http://drupal.org/developing/api/database

http://xandeadx.ru/blog/drupal/88

http://php.net/pdo
Контакты

Фиделин Евгений

Компания QArea

Email: eugene.fidelin@gmail.com

Skype: eugene.fidelin

Mais conteúdo relacionado

Mais procurados

хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaEvgeniy Kuzmin
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoMagecom Ukraine
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Yandex
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»Yandex
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоAlexander Makarov
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?yiiconf
 
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)Ontico
 
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...CocoaHeads
 

Mais procurados (20)

хранение данных
хранение данныххранение данных
хранение данных
 
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaMongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
MongoDB@addconf
MongoDB@addconfMongoDB@addconf
MongoDB@addconf
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Yii development
Yii developmentYii development
Yii development
 
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»
FrontTalks: Михаил Давыдов (Яндекс), «Promise – это не больно»
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
 
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
 
Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2
 
Render API.
Render API.Render API.
Render API.
 

Semelhante a Работа с БД в Drupal 7

Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeInterSystems
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
 Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат... Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...it-people
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиГлеб Тарасов
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubyAlexey Nayden
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4Technopark
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.DrupalCampDN
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)Andrey Gershun
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиГлеб Тарасов
 

Semelhante a Работа с БД в Drupal 7 (20)

Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
DSLs в Perl
DSLs в PerlDSLs в Perl
DSLs в Perl
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Перевод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в UnicodeПеревод базы Caché из 8 бит в Unicode
Перевод базы Caché из 8 бит в Unicode
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
 Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат... Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.Импорт данных с фреймворком Migrate. Владислав Богатырев.
Импорт данных с фреймворком Migrate. Владислав Богатырев.
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Lec 13
Lec 13Lec 13
Lec 13
 

Mais de Eugene Fidelin

Testing: Do More With Less
Testing: Do More With LessTesting: Do More With Less
Testing: Do More With LessEugene Fidelin
 
Node.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontendsNode.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontendsEugene Fidelin
 
Housekeeping the platform at scale
Housekeeping the platform at scaleHousekeeping the platform at scale
Housekeeping the platform at scaleEugene Fidelin
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsEugene Fidelin
 
Redis persistence in practice
Redis persistence in practiceRedis persistence in practice
Redis persistence in practiceEugene Fidelin
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтовEugene Fidelin
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Eugene Fidelin
 
Работа с Views в Drupal 7
Работа с Views в Drupal 7Работа с Views в Drupal 7
Работа с Views в Drupal 7Eugene Fidelin
 
Работа с полями (fields) в Drupal 7
Работа с полями (fields) в Drupal 7Работа с полями (fields) в Drupal 7
Работа с полями (fields) в Drupal 7Eugene Fidelin
 
Работа с материалами (nodes) в Drupal 7
Работа с материалами (nodes) в Drupal 7Работа с материалами (nodes) в Drupal 7
Работа с материалами (nodes) в Drupal 7Eugene Fidelin
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Eugene Fidelin
 

Mais de Eugene Fidelin (12)

Testing: Do More With Less
Testing: Do More With LessTesting: Do More With Less
Testing: Do More With Less
 
Node.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontendsNode.js BFFs - our way to the better/micro frontends
Node.js BFFs - our way to the better/micro frontends
 
Housekeeping the platform at scale
Housekeeping the platform at scaleHousekeeping the platform at scale
Housekeeping the platform at scale
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontends
 
AngularJS in practice
AngularJS in practiceAngularJS in practice
AngularJS in practice
 
Redis persistence in practice
Redis persistence in practiceRedis persistence in practice
Redis persistence in practice
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
 
Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.Разработка и deploy Drupal сайтов с помощью Features.
Разработка и deploy Drupal сайтов с помощью Features.
 
Работа с Views в Drupal 7
Работа с Views в Drupal 7Работа с Views в Drupal 7
Работа с Views в Drupal 7
 
Работа с полями (fields) в Drupal 7
Работа с полями (fields) в Drupal 7Работа с полями (fields) в Drupal 7
Работа с полями (fields) в Drupal 7
 
Работа с материалами (nodes) в Drupal 7
Работа с материалами (nodes) в Drupal 7Работа с материалами (nodes) в Drupal 7
Работа с материалами (nodes) в Drupal 7
 
Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.Фичи н-н-нада? Или почему стоит использовать модуль Features.
Фичи н-н-нада? Или почему стоит использовать модуль Features.
 

Работа с БД в Drupal 7

  • 1. Работа с БД в Drupal 7 Поддерживаемые СУБД MySQL (> 90% сайтов) PostgreSQL SQLite MSSQL и Oracle (дополнительный модули) Способы работы с БД Plain SQL queries PDO (PHP Data objects)
  • 2. Настройка подключения к БД В файле /sites/default/settings.php $databases = array ( 'default' => //connection array ( 'default' => //target array ( 'database' => 'drupal7db', 'username' => 'root', 'password' => 'secret', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );
  • 3. Выполнение запросов SELECT Plain SQL $nodes = db_query( "SELECT nid, title FROM {node} WHERE type = :type AND uid = :uid", array(':type' => 'page', ':uid' => 1)); PDO $nodes = db_select('node', 'n') ->fields('n', array('nid', 'title')) ->condition('n.type', 'page') ->condition('n.uid', 1) ->execute(); Обходим полученные записи foreach ($nodes as $node) { $items[$node->nid] = $node->title; }
  • 4. Запрос SELECT с INNER JOIN, LIMIT и ORDER BY Plain SQL $result = db_query( "SELECT n.title, u.name FROM {node} n INNER JOIN {users} u ON n.uid = u.uid ORDER BY title DESC LIMIT 0, 10"); PDO $query = db_select('node', 'n') ->innerJoin('users', 'u', 'n.uid = u.uid') ->fields('n', array('title')) ->fields('u', array('name')) ->orderBy('n.title', 'DESC') ->range(0, 10) ->execute();
  • 5. Запрос SELECT для получение количества записей Plain SQL $count = db_query( "SELECT COUNT(*) FROM {node}") ->fetchField(); PDO вариант 1 $count = db_select('node') ->countQuery() ->execute() ->fetchField(); PDO вариант 2 $count = db_select('node') ->addExpression('COUNT(*)') ->execute() ->fetchField();
  • 6. Запрос SELECT со сложными условиями WHERE Plain SQL $nodes = db_query( "SELECT * FROM {node} WHERE title LIKE :title AND (uid = :uid OR status = :status)", array(':title' => '%' . db_like('somestring') . '%', ':uid' => 1, ':status' => 0)); PDO $nodes = db_select('node', 'n') ->fields('n') ->condition('n.title', '%' . db_like('somestring') . '%', 'LIKE') ->condition( db_or() ->condition('n.uid', 1) ->condition('n.status', 0) ) ->execute();
  • 7. Варианты получения результатов запроса SELECT по-умолчанию - массив объектов fetchAllKeyed() - ассоциативный массив fetchAllAssoc($key) - ассоциативный массив сгрупированный по указанному полю fetchCol() - массив значений одной колонки fetchField() - единичное значение поля rowCount() - кол-во строк таблицы затронутых запросом getQueryString() - сформированный SQL-запрос
  • 8. UPDATE — запросы на обновление значений Plain SQL (не рекомендуется) db_query( "UPDATE {node} SET status = :status WHERE nid = :nid", array(':status' => 1, ':nid' => 123)); PDO db_update('node') ->fields(array('status' => 1)) ->condition('nid', 123) ->execute();
  • 9. INSERT — запросы на вставку значений Plain SQL db_query( "INSERT INTO {mytable} (intvar, stringvar, floatvar) VALUES (:int, :string, :float)", array(':int' => 1, ':string' => 'somestring', ':float' => 3.14)); PDO db_insert('mytable') ->fields(array('intvar' => 5, 'stringvar' => 'somestring', 'floatvar' => 3.14)) ->execute();
  • 10. DELETE — запросы на удаление значений Plain SQL db_query( "DELETE FROM {node} WHERE uid = :uid AND created < :created", array(':uid' => 1, ':created' => time() - 3600)); PDO db_delete('node') ->condition('uid', 1) ->condition('created', time() - 3600, '<') ->execute();
  • 11. Специальные таблицы Variables — хранение настроек модулей variable_set($name, $value) variable_get($name, $default = NULL) variable_del($name) Cache, Cache_* — хранение кеша cache_set($cid, $data, $bin = 'cache', $expire = CACHE_PERMANENT) cache_get($cid, $bin = 'cache') Node, User и другие объекты вставлять, обновлять или удалять нужно только с помощью API
  • 12. Расширенные возможности Работа с несколькими БД Master/Slave репликация Поддержка транзакций
  • 13. Ссылки на подробную информацию http://api.drupal.org/api/drupal/includes!database!database.inc/ group/database/7 http://drupal.org/developing/api/database http://xandeadx.ru/blog/drupal/88 http://php.net/pdo