MDB2 Error: not found とか Unable to bind to missing placeholder とかで困った話
MDB2 Error: not found
が出てしまい困ってしまいました。
SELECTなどは普通に実行できるので、致命的なものではないようなのですが、どうも原因が特定できない。このままだと情報不足なので
$result->getDebugInfo():
で追加で情報を取得。すると
[Error message: Unable to bind to missing placeholder: 00]
と言われていることが判明。
00ってなんぞ?って思っていたらクエリー内の時刻文字列のようでした。
そのそもプレースホルダのクエリ中にデータである時刻を埋め込んでいるのが間違いなのですが、だからと言って時刻文字列が引っかかるのは意味がわからない。
そこで、プレースホルダの機能を調べてみると
Manual :: プリペアドステートメント http://pear.php.net/manual/ja/package.database.mdb2.intro-execute.php
さらに、Oracle 風の名前つきプレースホルダを使用することも可能です。 名前つきプレースホルダを使用すると、ひとつの文の中で 同じプレースホルダを複数回使用することができます。
ということで、この形式が「:文字列」という形式のようで、これに引っかかって:00というプレースホルダを設置してしまい、渡すデータがないよーということでエラーを出しているようでした。
原因がはっきりわかったので、プレースホルダをやめて直接クエリを実行する形に変更して対応完了。
結局問題解決に一日かかりました・・orz