Top > MyPage
 

ADODBを使ってのPHPでのデータベース取扱い

ADODBについて

  • PEAR:DBなどにくらべて高速
  • Windowsプログラマに易しいこれはMicrosofのADOにコーディングの仕方でよく似たところがたくさんあるから。
  • SELECT文にのみフォーカスしている他のPHPデータベースクラスとは違い、複数のデータベースに素早く適応できるINSERTとUPDATEを制御するコードをサポートしています。色々なデータベースに対して、データをハンドリングしたり、文字列を結合したり、文字列をクオートするメソッドを提供しています。

などの特徴があるようです。

インストール

SourceForgeなどから入手して、Webサーバからアクセスできるディレクトリに全てのファイルを展開してください。

最小インストールとしては、

  • adodb.inc.php
  • adodb-lib.inc.php
  • adodb-time.inc.php
  • drivers/adodb-$database.inc.php
  • license.txt(法的理由により)
  • adodb-php4.inc.php
  • adodb-iterator.inc.php

が入っていればいいようです。

データベースへの接続

例えば、MySQLデータベースに接続するためには:

include('/path/to/set/here/adodb.inc.php');
$conn = ADONewConnection('mysql');

のように接続(Connection)オブジェクトを生成します。

この時点では、データベースに接続していません。(dsnを渡す場合には接続します。)永続(persistent)か非永続(non-persistent)接続を使うかを最初に決定する必要があります。永続接続の利点は、(たとえClose()を呼んだにしろ)データベース接続が閉じられないのでより高速なことです。しかし非永続接続はリソース消費が少なくてすむので、データベースとWebサーバが高負荷になるリスクを軽減してくれます。

永続接続には$conn->PConnect()を、非永続接続には$conn->Connect()を使ってください。データベースドライバの中にはNConnect()をサポートしているものもあります。これはそのつど新しい接続を生成します。

接続は次のように行います。

#mysql
$conn = ADONewConnection('mysql'); 
$conn->PConnect('localhost','userid','password','database');
	
# あるいは dsn だと
$dsn = 'mysql://user:pwd@localhost/mydb'; 
$conn = ADONewConnection($dsn);  # no need for Connect()
	
# あるいは永続的 dsn だと
$dsn = 'mysql://user:pwd@localhost/mydb?persist'; 
$conn = ADONewConnection($dsn);  # no need for PConnect()

#PostgreSQL
$conn = ADONewConnection('postgres'); 
$conn->PConnect('localhost','userid','password','database');

$dsn = 'postgres://user:pwd@localhost/mydb?persist';  # persist は任意
$conn = ADONewConnection($dsn);  # Connect/PConnect は不要

#接続文字列を使用
$conn->PConnect('host=localhost port=5432 dbname=mary');

SQL文の実行

Execute()関数を使うことでデータベースへのSQL文の実行ができます。この関数はADORecordSetオブジェクトを返します。ADORecordSetオブジェクトは実際にはfields[]配列の現在の行を保持しているカーソルです。行から配列を取り出すにはFetchRow()を使います。

<php?
include('adodb.inc.php');	   # ADOdb共通コードをロード
$conn = ADONewConnection('mysql');	# connectionを生成
$conn->PConnect('northwind');   # northwind DSNに接続
$recordSet = $conn->Execute('select * from products');
if (!$recordSet) 
	print $conn->ErrorMsg();
else
while($item = $recordset->fetchRow()){
    print $item['id'];
    print $item['name'];
}

$recordSet->Close(); # 任意
$conn->Close(); # 任意

?>
    

UpdateとInsert SQL文の生成

AutoExecute()はGetInsertSQL()とGetUpdateSQL()に進歩したラッパーを提供することで、ものごとを単純化しています。例えば、INSERTは次のようにすることで可能です。

$record["firstname"] = "Bob"; 
$record["lastname"] = "Smith"; 
$record["created"] = time(); 
$insertSQL = $conn->AutoExecute($rs, $record, 'INSERT'); 

またUPDATEは次のようにして行います。

$record["firstname"] = "Caroline"; 
$record["lastname"] = "Smith"; # Update Caroline's lastname from Miranda to \
    Smith
$insertSQL = $conn->AutoExecute($rs, $record, 'UPDATE', 'WHERE id = 1');

その他

ほかにもたくさんのメソッドがありますが、データベースの種類によってはサポートしていない機能やメソッドがあるようです。詳しいことはこちらでみれます。