あまり知られていないが、
mysql関数の拡張機能mysqliは、
PAER::DBでは利用できない。
いや、正確には使えるのだが、
使うメリットはない。
mysqliは新たに、
関数APIとオブジェクトAPIの両対応 プリペアドクエリとバインド変数 複数のクエリを同時に実行
などが利用できるのですが、
いずれもPAER::DBでは実装されてない。(1.7.6現在)
MDB2もPHP5専用ではないので、
例外処理は使用できないのだが、
それ以外はデフォルトでサポートしている。
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を使用した場合、
(当然なのだが)connectメソッドを別途起動する必要がある。
意外と忘れやすい。(っていうかはまった。)
$dbObj = & MDB2::singleton( ~~ ); $dbObj->connect();
複数の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が発動する。
取得したデータはすべて解放しないと次のSQLは送信できないことに注意