PHPData Objects (PDO)を使う

フレームワークとか外部のライブラリとかは現時点ではなるべく使わないようにしています。
なにせ入門者なので、よくわからずにこれらを利用することで生じる問題が怖いからです。


あんまり標準的になっていて問題になりようがない場合とか、ゼロから書くにはあまりに大変な場合は別ですけどね。


PHPからMySQLをいじるにあたってもネイティブ関数を使ってごりごり書いていくつもりでしたが、気がかわってPDOを使うことにしました。



使わないでいいかな、と思っていた理由

どうせ一人で作るサービスであること、さほど複雑なサービスを考えているわけではないこと、MySQLから他のDBに変更することも当分考えにくいこと、覚えることが増えること(笑)、出来る限りブラックボックスにはしたくないこと。
以上に照らせば、ネイティブ関数の方が速いなら、あえてデータベース抽象化レイヤクラスを導入する必要はないと思っていました。


気が変わった最大の理由

PHP Data Objects(PDO)が、拡張モジュール(PECL)とはいえ、標準的に導入されているから。


ここまで標準的になっているなら、ネイティブ関数同様、PHPのバージョンアップ等で突然全く使えなくなることはあるまい。PHPのマニュアルにも情報があるし、困った時にドキュメントも探しやすいということにつながるからです。


PHP:PDO Manual
 http://php.net/manual/ja/book.pdo.php


その他の気が変わった理由

PEAR::DB、MDB2、ADODB、PDO、ネイティブ関数の速度比較は数あれど、この記事が最も説得力がありました。


▽PDO、PEAR::DB、MySQL関数の速度比較([Z]ZAPAブロ〜グ2.0)
 http://zapanet.info/blog/item/972
※selectの場合


書かれている「DBを変更する予定もないのであればネイティブ関数のmysqli関数でチューニングするという方向で良い」にあたるのですが、プリペアドステートメントを用いてSQLを発行すればキャッシュで大幅なスピードアップが可能というのを魅力に感じました。
自分にとってのメリットがみつかったよ!


(その他参考)


PHP:ADODBを使おう その1:速度検証(1人で稼ぐ日記)
 http://kokoromo.jugem.cc/?eid=196
※insertの場合


▽PDOでサクサクDB開発(CodeZine
 http://codezine.jp/article/detail/433