PEARのMDB2を利用してDBと接続した際、INSERTなどはできるがSELECTでデータを取得できないという状況に直面しました。
環境は
- WIndows2008 WebServer
- IIS 7.0
- PHP 5.3.3
- MySQL 5.1.33
です。
状況の詳細は次の通りです。
stable版のPEAR MDB2 ver.2.4.1をインストール。MySQLに合わせてPHP5以上なのでMDB2_Driver_mysqli 1.4.1もインストール。
PHP5.3系とMDB2の組み合わせだと、既知の問題として「Deprecated: Assigning the return value of new by reference is deprecated in」というエラーが出るようです。
どうやら新しいPHPのバージョンではnewでオブジェクトを生成すると自動的に参照されるにもかかわらず、MDB2では「=&」と記述しているため、再度参照しようとしてしまいエラーになるようです。
その解決方法としてエラーメッセージの行数を確認して「=&」を「=」に書き換えるという方法があるようです。
しかしこの解決策を実行してしまうとSELECT文を実行してもデータが取得できないという状況に陥ります。
かなりはまりました…。数時間は悩んだでしょうか…。
結論を述べると
PHP5.3以上を利用している場合、MDB2 ver.2.5.0b3とMDB2_Driver_mysqli ver.1.5.0b3を利用するようにしましょう。
これらはベータ版ですが正式にPHP5.3に対応しています。正しくSELECT文が実行されることはもとより、エラー表示も消えます。