16
Drupal 7 Database API Andriy Podanenko [email protected]

Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Drupal 7Database API

Andriy [email protected]

Page 2: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Gold Sponsor ofDrupalCamp Kyiv 2011

Page 3: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Silver Sponsors ofDrupalCamp Kyiv 2011

Page 4: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Server configuration

PHP 5.0+ (5.3+ recommended)php5-pdophp5-pdo_mysqlphp5-pdo_pgsqlphp5-pdo_sqlitemysql, postgres…Apache1.3+ (or php cgi enabled web server)

Page 5: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

The start…

php.net/pdo<?phpabstract class DatabaseConnection extends PDO…

// Drupal fun…// Because the other methods don't seem to work right.$driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

Page 6: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Class Hierarhyabstract class DatabaseConnection extends PDO…

DatabaseConnectionDatabaseConnection::select db_select (SelectQuery)DatabaseConnection::delete db_delete (DeleteQuery)DatabaseConnection::updatedb_update (UpdateQuery)DatabaseConnection::query db_query (DatabaseStatementInterface)DatabaseConnection::insert db_insert (InsertQuery)DatabaseConnection::merge db_merge (MergeQuery)…

Page 7: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

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)

Page 8: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Query interface hierarchy

Page 9: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

db_select

SELECT 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

Page 10: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

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'));

Page 11: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

DatabaseTransaction (innodb,pgsql)

<?php function 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)} //

Page 12: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

$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)}

Page 13: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

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…

Page 14: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Drupal 6 – dbtng module (backport)

drupal.org/project/dbtngdbtng_* (full functions list in dbtng.module)

dbtng_querydbtng_set_active

db_select•good for support old sites

•multi database setup possibility for Drupal 6•preparing code for upgrade

Page 15: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

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

Page 16: Andriy Podanenko.Drupal database api.DrupalCamp Kyiv 2011

Drupal DB api->executed();

twitter.com/podarokfacebook.com/podarokvkontakte.ru/podarokua [email protected]/user/116002drupal.ua/user/23

http://simbioz.ua