ADOdb

Advertisement

概要 - ADOdbとは

ADOdbは、データベース抽象化ライブラリである。なぜ抽象化と呼ばれるかというと、ADOdbでは様々なベンダーやオープンソースのデータベース製品に対して統一的な手段でのアクセスを提供しているからである。

対応製品

  • MySQL
  • PostgreSQL
  • Interbase
  • Firebird
  • Informix
  • Oracle
  • MS SQL
  • Foxpro
  • Access
  • ADO
  • Sybase
  • FrontBase
  • DB2
  • SAP DB
  • SQLite
  • Netezza
  • LDAP
  • generic ODBC
  • ODBTP
オフィシャルサイトより。

入手

接続 - Connection

データの検索・追加・更新・削除などの、どの操作を行うにしても、はじめにコネクション(データベースとの接続)を確立する必要がある。
まずはじめに、次の方法でコネクションを取得する。

コネクションオブジェクトの取得(DSNを利用する場合)

※この方法のほかにDSNを利用しない方法(後述)もあるが、接続の制御を行う必要があるので、通常はこちらの方法を利用する。ADOdb4.51以降のバージョンで利用することができる。

require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
ADOdbに含まれているadodb.inc.phpファイルを読み込み、ADONewConnection($dsn)関数を利用してコネクションオブジェクトを取得する。$dsnの書式は以下の通り。
ドライバ名://ユーザー:パスワード@ホスト/データベース[?オプション]
コネクションオブジェクトを取得すれば、そのままデータベースに対して問い合わせを行うことが出来る。

コネクションオブジェクトの取得〜コネクションの確立(DSNを利用しない場合)

※DSN(データソース名)が利用できる(ADOdb4.51以降のバージョン)場合は、以下に記述するコネクションの確立とコネクションのクローズをフレームワークが自動的に処理してくれるため、DSNを利用してコネクションオブジェクトの取得を行うこと。方法は前述。

require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql");
ADOdbに含まれているadodb.inc.phpファイルを読み込み、ADONewConnection($driver)関数を利用してコネクションオブジェクトを取得する。
ドライバ名にはmysqlやoracleなど、利用する製品に合わせた文字列を指定する。ADOdb内のdriversフォルダにドライバの一覧が定義されている。

コネクションオブジェクトを取得したら、続いてデータベースとの接続を行う。接続には$conn->PConnect()関数(または$conn->Connect()関数)を利用する。
※PConnectは永続接続、Connectは非永続接続を行う(説明は後述)。

require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql");
$conn->PConnect("localhost", "root", "", "yokohama");

PConnect関数(Connect関数)の引数は以下の通り
PConnect(ホスト, ユーザー, パスワード, データベース);

データベースとの接続が必要なくなったときは、接続を閉じる必要がある。接続を閉じるためにはClose()関数を実行すればよい。

$conn->Close();
ただし、PHP4以降のバージョンでは自動的に開放されるため、明示的にコールする必要はない。

永続接続と非永続接続

永続接続では、一度データベースへ接続を行うと、その接続が閉じられることがないため、より高速にデータベースアクセスを行うことができる。
非永続接続は、必要時に接続を行い、不要になったときには切断を行う方法。不要時に接続を保持しないため、サーバーの負荷を抑えることができる。

SQLの実行

ADOdbでは、取得したコネクションオブジェクトに対してExecute($sql)メソッドを実行することで、SQLを実行することができる。
Execute($sql)メソッドでは、SQLが正常に終了した場合はADORecordSetを継承したオブジェクト(データベースにより異なる)が返却され、SQL実行時にエラーが発生した場合(e.g. update対象行が見つからない場合)、falseが返却される。

データの取得(select)

簡単なselectの例


select.php
<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$recordSet = $conn->Execute("select * from user");
print_r($recordSet->fields);
?>
データが存在した場合はADORecordSetオブジェクトが返却され、fieldsフィールドに結果が格納される。
結果
Array ( 
    [0] => 1 [id] => 1 
    [1] => mysql [name] => mysql 
    [2] => 5 [age] => 5
) 
インデックス配列と連想配列の両方に結果が格納されている。

SQLエラーが発生した場合、falseが返却される。

select_databasenotfound.php
<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$recordSet = $conn->Execute("select * from databasenotfound");
if(!$recordSet){
	print "false!!";
}
?>

結果
false!!

実行したSQLを取得

ADORecordSetオブジェクトのsqlフィールドに、実際に実行したsqlが格納されている。パラメータを動的に設定したときに、どのようなSQLが実行されたのか確認することができる。

結果が複数の場合

結果が複数の場合でも、ADORecordSet->fieldsには1件目のデータしか格納されていない。次のデータを参照するときは、MoveNext()関数を実行すると、次のデータがADORecordSet->fieldsに格納される。
格納されているデータが最後のレコードの場合、ADORecordSet->EOFにtrueが格納される。
<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$recordSet = $conn->Execute("select * from user");
while(!$recordSet->EOF){
    print_r($recordSet->fields["name"]);
    print("<br>");
    $recordSet->MoveNext();
}
?>

結果
mysql
adodb

データの追加(insert)

Execute($sql)メソッド

insertを利用する場合、selectと同様にExecute($sql)メソッドを実行すればよい。

insert.php
<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$recordSet = $conn->Execute(
	"insert into user (id, name, age) values ('98', 'sqlserver', '30')");
?>

AutoExecute($table, $arrFields, $mode)メソッド

ADOdb4.56以降から、insertとupdateをより簡単に実行できるようにAutoExecute($table, $arrFields, $mode)メソッドが定義された。
このメソッドを利用すると、SQLを意識せずにデータの追加・更新を行うことができる。

<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$record["id"] = "33";
$record["name"] = "oracle";
$record["age"] = "40";
$insertSQL = $conn->AutoExecute("user", $record, "INSERT"); 
?>

データの更新(update)

Execute($sql)メソッド

insertと同様にExecute($sql)メソッドを実行するとupdateを実行することができる。

update.php
<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$recordSet = $conn->Execute(
	"update user set name='db2' where id = 0");
?>

AutoExecute($table, $arrFields, $mode)メソッド

こちらもinsert同様、AutoExecuteメソッドを利用してupdateを実行することができる。実行の際には$modeには"UPDATE"を指定する。

@todo

データの削除(delete)

Execute($sql)メソッド

Execute($sql)メソッドを実行し、delete文を発行する。

delete.php
<?php
require_once "adodb/adodb.inc.php";
$conn = ADONewConnection("mysql://root:@localhost/master");
$recordSet = $conn->Execute("delete from user where id = 99");
?>

リンク

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ

サイト検索

Google

Web サイト内

Y!ログール