Accessを使い慣れている人には常識なのかもしれませんが、少々ハマったのでメモしておきます。
通常、PHPのODBCでプリペアドステートメントを使用する場合は以下のように書きます(参考:odbc_prepare)。
// 公式の例の通り
$stmt = odbc_prepare($conn, 'CALL myproc(?,?,?)');
$success = odbc_execute($stmt, array($a, $b, $c));
ところが、対象データベースがAccessの場合は以下のように ? をクォートで囲まないとエラーになります。
// ? をクォートで囲む必要がある
$stmt = odbc_prepare($conn, "CALL myproc('?','?','?')");
Accessでは ? がワイルドカードとして扱われるのが原因なのでしょうか。
本来はドライバが吸収すべき点だと思うのですが・・・。