mysqliをPEAR::MDB2で利用する

PHP::PEAR

概要

あまり知られていないが、
mysql関数の拡張機能mysqliは、
PAER::DBでは利用できない。
いや、正確には使えるのだが、
使うメリットはない。

mysqliは新たに、

関数APIとオブジェクトAPIの両対応
プリペアドクエリとバインド変数
複数のクエリを同時に実行

などが利用できるのですが、
いずれもPAER::DBでは実装されてない。(1.7.6現在)

MDB2もPHP5専用ではないので、
例外処理は使用できないのだが、
それ以外はデフォルトでサポートしている。

PEAR::MDB2でmysqliを使用するときの注意点

必ず使用するオプション

MDB2のインスタンスを生成するときに、
必ずつけておかなければならないオプションがある

$dbObj = & MDB2::singleton( SGL_DB::getDSN(), array(
                              'default_table_type'=>'INNODB',
                              'use_transactions' => true ) 
);

すべてのデータベースをMyISAMで構築している人は別にかまわないのだが、
1つ以上InnoDBやBDBなどを利用している人は、
トランザクションオプションを指定しておく。

デフォルトキャラクターセット

MySQL4.1以上の人はdsnにcharsetを指定しておく方が良い。

$dsn = mysqli://hoge@hoge/hoge?charset=utf8

singletonパターン、factory methodパターン

singletonやfactoryを使用した場合、
(当然なのだが)connectメソッドを別途起動する必要がある。
意外と忘れやすい。(っていうかはまった。)

$dbObj = & MDB2::singleton( ~~ );
$dbObj->connect();

multi_queryオプション

複数のSQLを一度に送信することが出来るmulti_queryオプション。
mysqli_queryの代わりにmysqli_multi_queryが動き出すのだが、
これを使用するときは複数のクエリを送信する時のみに限定する。

$sql = <<<SQL
 SELECT * FROM hoge;SELECT * FROM hoge1;
SQL;
$dbObj->setOption('multi_query', true);
$dbObj->query( $sql );
$dbObj->setOption('multi_query', false );

一度セットすると永続的にmulti_queryが動き出すのだが、
begin, set autocommit, set namesなど、
単一で使用するクエリもmysqli_multi_queryで動作して、
raiseErrorが発動する。


お名前:


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較