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

Embed Size (px)

DESCRIPTION

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

Citation preview

  • 1. Drupal 7 MySQL (> 90% )PostgreSQLSQLiteMSSQL Oracle ( ) Plain SQL queriesPDO (PHP Data objects)

2. /sites/default/settings.php$databases = array (default => //connectionarray (default => //targetarray (database => drupal7db,username => root,password => secret,host => localhost,port => ,driver => mysql,prefix => ,),),); 3. SELECTPlain SQL$nodes = db_query( "SELECT nid, titleFROM {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 BYPlain SQL$result = db_query("SELECT n.title, u.name FROM {node} nINNER 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 WHEREPlain SQL$nodes = db_query("SELECT * FROM {node} WHERE title LIKE :titleAND (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 = :statusWHERE nid = :nid",array(:status => 1, :nid => 123));PDOdb_update(node) ->fields(array(status => 1)) ->condition(nid, 123) ->execute(); 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. 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. 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/7http://drupal.org/developing/api/databasehttp://xandeadx.ru/blog/drupal/88http://php.net/pdo 14. QAreaEmail: [email protected]: eugene.fidelin