#setlinebreak(on)
* mysqliをPEAR::MDB2で利用する [#t9604e0e]
#htmlinsert(googleAdsense.html)
#ref(http://dozo.rgr.jp/img/img20_file.png,right,nolink,around,PHP::PEAR)

** 概要 [#cbd8480d]

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

mysqliは新たに、
 関数APIとオブジェクトAPIの両対応
 プリペアドクエリとバインド変数
 複数のクエリを同時に実行
などが利用できるのですが、
いずれも[[PAER::DB>PEAR/DB]]では実装されてない。(1.7.6現在)

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

** PEAR::MDB2でmysqliを使用するときの注意点 [#ia94bab9]
***必ず使用するオプション [#t284f88a]
MDB2のインスタンスを生成するときに、
必ずつけておかなければならないオプションがある
 $dbObj = & MDB2::singleton( SGL_DB::getDSN(), array(
                               'default_table_type'=>'INNODB',
                               'use_transactions' => true ) 
 );
すべてのデータベースをMyISAMで構築している人は別にかまわないのだが、
1つ以上InnoDBやBDBなどを利用している人は、
トランザクションオプションを指定しておく。

***デフォルトキャラクターセット [#x83c1786]
MySQL4.1以上の人はdsnにcharsetを指定しておく方が良い。
 $dsn = mysqli://hoge@hoge/hoge?charset=utf8

***singletonパターン、factory methodパターン [#vb660adc]
singletonやfactoryを使用した場合、
(当然なのだが)connectメソッドを別途起動する必要がある。
意外と忘れやすい。(っていうかはまった。)
 $dbObj = & MDB2::singleton( ~~ );
 $dbObj->connect();

***multi_queryオプション [#ud32f08c]
複数の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が発動する。



#comment



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