Top / PEAR / MDB2 / mysqli


 #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が発動する。
 
 取得したデータはすべて解放しないと次のSQLは送信できないことに注意
 
 
 
 #comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較