SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Реализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в MagentoРеализация шаблонов корпоративных приложений в Magento
Реализация шаблонов корпоративных приложений в Magento
Magecom Ukraine
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
Dmitry Soshnikov
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Yandex
 
Yii development
Yii developmentYii development
Yii development
MageCloud
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
Alexander Makarov
 
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Одно постоянное соединение на все вкладки сайта (Глеб Арестов)
Ontico
 

Was ist angesagt? (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.
 

Ähnlich wie Работа с БД в Drupal 7

Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
Technopark
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
Technopark
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с даннымиКурсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Курсы по мобильной разработке под iOS. 5 лекция. Работа с данными
Глеб Тарасов
 
Sequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на RubySequel — механизм доступа к БД, написанный на Ruby
Sequel — механизм доступа к БД, написанный на Ruby
Alexey Nayden
 
Web весна 2012 лекция 4
Web весна 2012 лекция 4Web весна 2012 лекция 4
Web весна 2012 лекция 4
Technopark
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Глеб Тарасов
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
MoscowDjango
 
Импорт данных с фреймворком 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. Работа с данными
Глеб Тарасов
 

Ähnlich wie Работа с БД в 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
 

Mehr von Eugene Fidelin

Mehr von 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.
 

Kürzlich hochgeladen

2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 

Kürzlich hochgeladen (9)

2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 

Работа с БД в 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