PEARライブラリのMDB2でMYSQLに接続

PEAR::MDB2

PEARのパッケージの1つで、PHPからDBを扱う際などに使用します。

MDB2を利用するメリット

大きなメリットの1つとして、データベース製品が変更になった際にメンテナンスが楽にできるようになります。
MYSQLでシステムを構築した場合、「MYSQL_CONNECT」や「MYSQL_QUERY」などの命令を使いますが、この命令はOracleデータベースでは使えません。
そんな時、MDB2PHPとデータベースの中間に立ち、データベースの違いを吸収してくれるので、データベース製品が変更になってもプログラムの変更が極力少なくできます。

インストール

MDB2を使用するには、MDB2本体と利用するデータベース用のドライバが必要です。(xamppの場合、MDB2本体は入っていますが、ドライバは入ってないかもしれません。)
以下のようにコマンドを入力します。
本体

pear install MDB2

ドライバ(MYSQL)

pear install MDB2_Driver_mysql

接続

<?php
	// MDB2 ライブラリの読み込み
	require_once("MDB2.php");

	// エラー発生時の処理
	PEAR::setErrorHandling( PEAR_ERROR_CALLBACK, 'handleError' );
	function handleError( $error )
	{
	    die('エラー発生しました。');
	}

	// データベース接続
	$dsn = array(
		"phptype"  => "mysql",
		"username" => "root",
		"password" => "1234",
		"hostspec" => "localhost",
		"database" => "test",
	);
	$mdb2 =& MDB2::connect( $dsn );

	// 文字コード指定。
	$mdb2->setCharset( "utf8" );
        
        //データベース切断
        $mdb2->disconnect();
?>

クエリの実行

クエリのメソッドはいくつか用意されてますが、代表的なのは以下のメソッドです。

query()

SELECTなどSQLを発行して結果を返す場合に使用

<?php
// クエリ実行
$sql = "SELECT * FROM clients";
$res =& $mdb2->query($sql);

// 結果がエラーでないかどうかを常にチェック
if (PEAR::isError($res)) {
    die($res->getMessage());
}
?>
exec()

INSERT,UPDATE,DELETEなど結果を返す必要のないSQLの発行に使用

<?php
//SQL発行
$sql  = "INSERT INTO clients (name, address) VALUES ($name, $address)";
$affected =& $mdb2->exec($sql);

// 結果がエラーでないかどうかを常にチェック
if (PEAR::isError($affected)) {
    die($affected->getMessage());
}
?>

プリペアドステートメント

INSERTの場合
<?php
$sql = "INSERT INTO clients (name , address, phone) VALUES (?, ?) ";
    $type = array('text', 'text', 'text'); //変数に代入する値のタイプ
    $str = $mdb2->prepare($sql, $type, MDB2_PREPARE_MANIP);
    $data = array('東京 太郎', '東京都', '03-123-4567'); //変数に代入される値を配列で指定
    //プリペアド・ステートメントの実行
    $res = $str->execute($data);
?>
UPDATEの場合
<?php
 $sql = "UPDATE clients SET name = ?, address = ?, phone = ? WHERE id = ?";
    $type = array('text', 'text', 'text', 'integer'); //変数に代入する値のタイプ
    $str = $mdb2->prepare($sql, $type, MDB2_PREPARE_MANIP);
    $data = array('大阪 太郎', '06-123-4567', 2); //変数に代入される値を配列で指定
    
    $res = $str->execute($data);	//プリペアド・ステートメントの実行
?>

詳しい説明は公式マニュアルhttp://pear.php.net/manual/ja/package.database.mdb2.phpをご覧ください。