nihimotoの日記

https://mapsengine.google.com/map/edit?mid=zhpqXW1XM-zc.kmD-c8p1GAWI

MDB2 Error: not found とか Unable to bind to missing placeholder とかで困った話

MDB2プレースホルダを使っていてどうしても

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