予想だにしてませんでした。
(ノ・・)ン。。。。。。(((●コロコロッ
PHP5+PDO_MySQLでサイト構築は
私の中でかなり定番になりつつある。
PEAR::DBだと、PAER::DBをラッピングする様なものを作らなければならないのだが、
PDOだとそれが必要ない。
ネイティブ関数と同じC言語で出来ているので速度は申し分ない。
今のところ大きなトラブルもなく安定動作もしている。
Prepare Statementが使えるのも魅力の一つ。
SQL Injection問題が一気になくなる。
大きな問題はまだでていないが、
小さな問題はいくつかでている。
整理の意味を込めて、少しまとめてみよう。
環境はPHP5.2, PDO1.0.3である。
[More:]
●DSNが使いにくい
PDOのDSNはPEAR::DBのDSNと比べて使いにくい。
ユーザー名とパスワード部分がDSNと分離しているためだ。
(なんでPEAR::DB同じにしなかったのか。。。)
これが理由でPEAR::DBからの移植・相乗りなどが難しくなった。
●PEARライブラリとの連携
残念ながら、現状PEARライブラリと連携が全く取れない。
例えばPEAR::AuthでDB上のユーザー名、パスワードを取得する場合、
PDOを経由してデータ取得することは出来ない。
現状PEAR::DBなどを経由している。
●複数のprepareメソッド
prepareメソッドを実行するとPDOstatement Objectが返ってくる。
それをハンドリングして柔軟なクエリを実行しようとすることは多聞に考えられるのだが、
どうも、一つexecuteメソッドを実行すると
PDOstatement Objectを解放しない限り次のexecuteメソッドが実行できない。
動作に確実性がないのが一番困る。
そのあたりはMDB2の方が優秀か。
●「:(コロン)」問題
PDOのqueryメソッドを利用する際、
SQLの中に「:(コロン)」があると文字化けが発生する。
文字化けの理由はわかっていない(多分bind関連だと思う)が、
Prepare Statement(prepareメソッド, bindメソッド executeメソッドなど)を利用すると回避できる。
●取得最大サイズ
カラムに対してなのか、
レコードに対してなのか、
結果すべてに対してなのかはわかっていないが、
取得した結果の最大サイズが1MBを超えると、
内容が途中までしかでてこなくなる。
PDO::ATTR_MAX_COLUMN_LENというパラメータがPHP5.2からあるのだが、
使ってみても結果は変わらなかった。
その他諸々あった気がするが、
思いついたら追記していくことにする。