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.

Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

2,262 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

  1. 1. Drupal 7Database API Andriy Podanenko a.podanenko@simbioz.com.ua
  2. 2. Gold Sponsor ofDrupalCamp Kyiv 2011
  3. 3. Silver Sponsors ofDrupalCamp Kyiv 2011
  4. 4. Server configurationPHP 5.0+ (5.3+ recommended)php5-pdophp5-pdo_mysqlphp5-pdo_pgsqlphp5-pdo_sqlitemysql, postgres…Apache1.3+ (or php cgi enabled web server)
  5. 5. The start…php.net/pdo<?phpabstract class DatabaseConnection extendsPDO…// Drupal fun…// Because the other methods dont seem to work right.$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6. 6. 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)…
  7. 7. 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)
  8. 8. Query interface hierarchy
  9. 9. 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
  10. 10. 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));
  11. 11. 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)} //
  12. 12. $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)}
  13. 13. 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…
  14. 14. Drupal 6 – dbtng module (backport) drupal.org/project/dbtng dbtng_* (full functions list in dbtng.module) dbtng_query dbtng_set_active db_select • good for support old sites • multi database setup possibility for Drupal 6 • preparing code for upgrade
  15. 15. 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
  16. 16. 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

×