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 database api

4,798 views

Published on

Drupal 7 database API

Published in: Technology, Education
  • Be the first to comment

Drupal 7 database api

  1. 1. Drupal 7Database API Andriy Podanenko a.podanenko@simbioz.com.ua
  2. 2. Server configurationPHP 5.0+ (5.3+ recommended)php5-pdophp5-pdo_mysqlphp5-pdo_pgsqlphp5-pdo_sqlitemysql, postgres…Apache1.3+ (or php cgi enabled web server)
  3. 3. The start…php.net/pdo<?phpabstract class DatabaseConnection extends PDO…// Drupal fun…// Because the other methods dont seem to work right.$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  4. 4. Class Hierarhy abstract class DatabaseConnection extends PDO…DatabaseConnectionDatabaseConnection::select db_select (SelectQuery)DatabaseConnection::delete db_delete (DeleteQuery)DatabaseConnection::update db_update (UpdateQuery)DatabaseConnection::query db_query (DatabaseStatementInterface)DatabaseConnection::insert db_insert (InsertQuery)DatabaseConnection::merge db_merge (MergeQuery)…
  5. 5. DatabaseStatementInterface• execute ($args=array(), $options=array())• fetchAllAssoc ($key, $fetch=NULL)• fetchAllKeyed ($key_index=0, $value_index=1)• fetchAssoc ()• fetchCol ($index=0)• fetchField ($index=0)• getQueryString ()• rowCount () (UPDATE, DELETE, INSERT only)
  6. 6. Query interface hierarchy
  7. 7. db_selectSELECT name,description FROM taxonomy_term_data AS ttdWHERE tid LIKE 79<?php //Drupal$result = db_select(taxonomy_term_data, ttd);//returned SelectQuery$ret = $result -> fields(ttd, array(name, description));//returned SelectQueryInterface$ret = $result -> condition(tid, 79, like);// returned QueryConditionInterface$ret = $result -> execute(); // returned SelectQuery object$data = $ret -> fetchAll(); // fetched data as object from database
  8. 8. Other database (target)$result = db_select(taxonomy_term_data, ttd,array(target => slave));// adding other database at runtimeDatabase::addConnectionInfo(default, slave, array(database => ‘other_db,username => ‘name, password => pass,host => localhost, port => 5432,driver => pgsql));
  9. 9. DatabaseTransaction (innodb,pgsql)<?phpfunction demo_transaction()$temp = db_transaction();db_update… // charging account1 +100$db_update… // charging account2 -100$db_insert… // creating log entry for thatreturn TRUE; // automatically commit (no $temp)} //
  10. 10. $error->handle  try{} catch{}<?phpfunction demo_transaction()$temp = db_transaction();try {db_insert… // some ugly code here…return TRUE; }catch(Exception $e) { $temp->rollback();watchdog(‘demo error, print_r($e, TRUE)}
  11. 11. logging -> DatabaseLog$demo_log = new DatabaseLog;$demo_log->start(‘some_key’);db_update…db_select…// Calling functions or any…$demo_log->end(‘some_key’);print_r($demo_log->get(‘some_key’), TRUE);// printed indexed array for all queries…
  12. 12. Drupal 6 – dbtng module (backport) drupal.org/project/dbtngdbtng_* (full functions list in dbtng.module)dbtng_querydbtng_set_activedb_select• good for support old sites• multi database setup possibility for Drupal 6• preparing code for upgrade
  13. 13. Useful links• api.drupal.org/api/drupal/7• drupal.org/developing/api/database• upgrade.boombatower.com/tools/sql/inline• drupal.org/project/coder• php.net/pdo• drupal.org/project/dbtng• drupal.org/node/310069
  14. 14. Drupal DB api->executed();  twitter.com/podarok  facebook.com/podarok  vkontakte.ru/podarokua  a.podanenko@simbioz.com.ua  drupal.org/user/116002  drupal.ua/user/23 http://simbioz.ua

×