Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Работа с БД в Drupal 7Поддерживаемые СУБДMySQL (> 90% сайтов)PostgreSQLSQLiteMSSQL и Oracle (дополнительный модули)Способы...
Настройка подключения к БДВ файле /sites/default/settings.php$databases = array (  default => //connection  array (    def...
Выполнение запросов SELECTPlain SQL$nodes = db_query( "SELECT nid, title  FROM {node}  WHERE type = :type     AND uid = :u...
Запрос SELECT                 с INNER JOIN, LIMIT и ORDER BYPlain SQL$result = db_query("SELECT n.title, u.name FROM {node...
Запрос SELECT для получение количества записейPlain SQL$count = db_query( "SELECT COUNT(*) FROM {node}")->fetchField();PDO...
Запрос SELECT со сложными условиями WHEREPlain SQL$nodes = db_query("SELECT * FROM {node} WHERE title LIKE :title  AND (ui...
Варианты получения результатов запроса SELECTпо-умолчанию - массив объектовfetchAllKeyed() - ассоциативный массивfetchAllA...
UPDATE — запросы на обновление значенийPlain SQL (не рекомендуется)db_query( "UPDATE {node}  SET status = :status  WHERE n...
INSERT — запросы на                            вставку значенийPlain SQLdb_query("INSERT INTO {mytable} (intvar, stringvar...
DELETE — запросы на удаление значенийPlain SQLdb_query("DELETE FROM {node} WHERE uid = :uid AND created < :created",array(...
Специальные таблицыVariables — хранение настроек модулейvariable_set($name, $value)variable_get($name, $default = NULL)var...
Расширенные возможностиРабота с несколькими БДMaster/Slave репликацияПоддержка транзакций
Ссылки на подробную информациюhttp://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7http://drupa...
КонтактыФиделин ЕвгенийКомпания QAreaEmail: eugene.fidelin@gmail.comSkype: eugene.fidelin
Upcoming SlideShare
Loading in …5
×

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

4,378 views

Published on

Лекция для студентов НТУ ХПИ. Рассказывает основы работы с БД в Drupal 7.
Рассмотрены различные виды запросов, использование PDO.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Работа с БД в Drupal 7Поддерживаемые СУБДMySQL (> 90% сайтов)PostgreSQLSQLiteMSSQL и Oracle (дополнительный модули)Способы работы с БДPlain SQL queriesPDO (PHP Data objects)
  2. 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. 3. Выполнение запросов SELECTPlain 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. 4. Запрос SELECT с INNER JOIN, LIMIT и ORDER BYPlain 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. 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. 6. Запрос SELECT со сложными условиями WHEREPlain 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. 7. Варианты получения результатов запроса SELECTпо-умолчанию - массив объектовfetchAllKeyed() - ассоциативный массивfetchAllAssoc($key) - ассоциативный массив сгрупированный поуказанному полюfetchCol() - массив значений одной колонкиfetchField() - единичное значение поляrowCount() - кол-во строк таблицы затронутых запросомgetQueryString() - сформированный SQL-запрос
  8. 8. UPDATE — запросы на обновление значенийPlain SQL (не рекомендуется)db_query( "UPDATE {node} SET status = :status WHERE nid = :nid",array(:status => 1, :nid => 123));PDOdb_update(node) ->fields(array(status => 1)) ->condition(nid, 123) ->execute();
  9. 9. INSERT — запросы на вставку значенийPlain SQLdb_query("INSERT INTO {mytable} (intvar, stringvar, floatvar) VALUES (:int, :string, :float)",array(:int => 1, :string => somestring, :float => 3.14));PDOdb_insert(mytable) ->fields(array(intvar => 5, stringvar => somestring, floatvar => 3.14)) ->execute();
  10. 10. DELETE — запросы на удаление значенийPlain SQLdb_query("DELETE FROM {node} WHERE uid = :uid AND created < :created",array(:uid => 1, :created => time() - 3600));PDOdb_delete(node) ->condition(uid, 1) ->condition(created, time() - 3600, <) ->execute();
  11. 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. 12. Расширенные возможностиРабота с несколькими БДMaster/Slave репликацияПоддержка транзакций
  13. 13. Ссылки на подробную информациюhttp://api.drupal.org/api/drupal/includes!database!database.inc/group/database/7http://drupal.org/developing/api/databasehttp://xandeadx.ru/blog/drupal/88http://php.net/pdo
  14. 14. КонтактыФиделин ЕвгенийКомпания QAreaEmail: eugene.fidelin@gmail.comSkype: eugene.fidelin

×