PHP4 + PEAR に関するメモ(2002/07/16) 
 

PEAR とは

PHP4 からDBアクセスする場合、そのDBアクセス固有の命令による記述を行います。そのためDBそのものを変えた場合(Postgres → Oracle とか)、DBアクセスの命令部分の記述を変更しなければいけない事態となってしまいます。かなり面倒・・・・

そこでJDBCの様な共通アクセス関数みたいのがあれば、DBのプラットホームを越えてプログラムを一切変更する事なく実行と思いません? それが PEAR なのです。但し物事には、メリット/デメリットがあり、メリットは、共通アクセス関数を提供でき便利に使えると言うこと。デメリットは、共通化することにより実行速度が多少犠牲になっている、かつアクセス方法に関しても細かい指定ができないと若干あります。

但し、共通アクセス関数を使えば、"Oracle", "Postgres", "MySql", "SYBASE", "ODBC" とその他にも随時対応しているので、かなり便利に使えるのでは?と思います。

  本家 : SQLデータベースをアクセスするための統一API

  参考 : PEARを使ったデータベース接続

必要な環境

PHP4.2.x 以上でかつ、コンパイルオプションに --without-pear が指定されてい場合、最低限のpear環境がインストールされます。この最低限の pear環境という意味は、現在開発途中なので頻繁にパージョンアップを繰り返しているため、最新版を求めるには CVS/Webインストーラによって最新版とする必要があります。

こんな感じになるらしい(ぱくり)

PEARを使わないMySQLへのデータベース接続の場合にはこのようになります

<?
$dbUser = "userName";
$dbPass = "password";
$dbHost = "localhost";
$dbName = "dbName";

// 接続
$connection = mysql_connect($dbHost, $dbUser, $dbPass) or die ("MySQL接続に失敗 (T.T)");
mysql_select_db($dbName) or die ("データベースに接続できません。");

//SQLを実行
$sql = "SELECT * FROM friends";
$result = mysql_query($query) or die ("SQL構文にエラーがあります。: $sql.". mysql_error());

//データベースの中身を表示
while ($row = mysql_fetch_row($result)) {
    echo "$row[1] - $row[2]\n";
}

//その他の情報を表示
echo mysql_num_rows($result) . " 件のデータを表示しました。\n";
mysql_close($connection);
?>

PEARを使って書き直してみます。 

<?
$dbUser = "userName";
$dbPass = "password";
$dbHost = "localhost";
$dbName = "dbName";

//データベースの種類
$dbType = "mysql";

// PEARのDBクラスをインクルードする。
include("DB.php");

// 接続
$db = DB::connect("$dbType://$dbUser:$dbPass@$dbHost/$dbName");

//SQLを実行
$sql = "SELECT * FROM friends";$result = $db->query($sql);

//データベースの中身を表示
while($row = $result->fetchRow()) {
   echo "$row[1] - $row[2]\n";
}

// その他の情報を表示
echo $result->numRows() . " 件のデータを表示しました。\n";
$dbh->disconnect();
?>