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の実行
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"); ?>

