PHPのDBアクセス

どうやらこういうことらしい。

(1) DB固有の関数群 msql_xxxx等

PHPで最も基本的かつ原始的な方法。対象DBごとに関数群がある。
プリペアードステートメント、バインド変数の仕組みはない。プログラム中で完全なSQLを組み立てて(sprintf等で)実行する。
基本的なサニタイジングとして、文字列中のシングルクオートなどをエスケープするための関数が用意されている。

例)mysql_real_escape_string

(2) 外部のライブラリ PEAR::DB, PEAR::MDB, PEAR::MDB2

いままではこれが一般的?
PHPコード面で、DBの違いを吸収してくれる。
多くの場合、プリペアードステートメント、バインド変数が使える。
基本的にはPHPスクリプトなので、速度面の向上は特に期待できない。

(3) PDO(PHP Data Object)

PHP 5.1からの標準機能で、DB間の違いを抽象化している。
プリペアードステートメント、バインド変数が使える。
ネイティブコードで実装されているので、PEAR等の外部ライブラリよりパフォーマンス面では期待できる。
ODBC/JDBCと同程度のインターフェイスを提供している。O/Rマッパー機能はない。
現時点ではサポートするDBMSが少ない?

(4) アプリケーションフレームワーク等を使用している場合は、固有の方法を持っている場合がある

今、CakePHP試してる。


(1)、(3)をざっくり試してみた。5.1以降ならPDO使っとけばよさそう(サポートしているDBMSなら)。