なるほど。
これはいいね。
(ノ・・)ン。。。。。。(((●コロコロッ
PEAR::DBにはこれ以上となくお世話になっている。
だが、データベースがどんどん進化・多様化してきている中、
PEAR::DBはその進化・多様化に追いついていない。
そして重いと評判だ。
(私的にはそうでもないのだが。)
その重さを軽減するために登場したのがPEAR::MDB。
リファクタリングしてソースコードがすっきり。
非常に見やすい。
PostgreSQLで使う以外はPEAR::MDBの方が速い(らしい)。
ただ問題なのはPEAR::MDBはすでに開発が終了してしまったことだ。
そこで登場したのがPEAR::MDB2。
元々はPEAR::MDBのPHP5版として登場したのだが、
PEAR::MDB2側に吸収された。
新たにDriver, Moduleという概念が追加され、
ファイルは細かく分割されている。
PEAR::DB_DataObject?のようにテーブル定義をファイルに保存しておき、
それをオブジェクトとして利用することが出来る
DriverとはPECL::PDOのように、
データベースの種類ごとにパッケージ化し、
それぞれを別パッケージとして開発している。
利用者はPEAR::MDB2とは別に使用するデータベースに応じたパッケージをインストールする。
例:
MySQLの時 pear install mdb2 pear install mdb2_mysql PostgreSQLの時 pear install mdb2 pear install mdb2_pgsql
ModuleとはPEAR::MDB2の拡張機能のことだ。
利用者はモジュールをロードして機能を拡張することになる。
例:
Extended $dbObj->loadModule('Extended');
既存のシステムでPEAR::DBを使用していて、
PEAR::MDB2に置き換えるときはいくつか注意が必要だ。
デフォルトでFactory Method(connectも)パターンの他に、
singletonパターンも装備している。
自前でsingletonパターンを作っていた人は、
こっちを利用する方が良いだろう。
autoCommitメソッドは削除されている。
トランザクションを利用するときは
begenTransactionメソッドを利用する。
その際、transactionオプションを有効にしておく必要がある。
$dbObj = & MDB2::singleton($dsn, array('use_transactions'=>true)); $dbObj->beginTransaction(); // transaction start
quoteSmartメソッドは削除されている。
quoteを利用する場合は
quoteメソッドを利用する。
PEAR::DBのgetAll, getAssoc, getOne, getColなどはデフォルトで存在しない。
これらはExtendedモジュールに入っているので、
利用する際はExtendedモジュールをロードしておく必要がある。
私は使わないのだがgetAssocの挙動はPEAR::DBとはかなり異なるようだ。