1

MS-Accessデータベースで単純なselect-queryを実行しようとしています。もちろん、SQLインジェクションを防ぎたいので、パラメーター付きのプリペアドステートメントを使用したい

$conn = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=/path/to/mdb/file.mdb", "ADODB.Connection", "password", SQL_CUR_USE_ODBC);
$res = odbc_prepare($conn, "SELECT * FROM customers WHERE holdingnumber = ?");
odbc_execute($res, array( 20000 ));
$row = odbc_fetch_array($res);
print_r($row);

それを試してみると、空の警告が表示されます。

Warning: odbc_execute(): in D:\xampp\htdocs\ZEOnline\test.php on line 5

しかし、パラメーターなしでそれを行うと('?'を20000に置き換え、odbc_executeから配列を削除する)、それは機能します。

なぜこれが機能しないのか、またはodbcの文字列を適切にエスケープする他の方法があるのか​​誰かが知っていますか?

PHPのバージョンは5.4.4であり、MSAccessDriverが最新バージョンである必要があります

4

1 に答える 1

0

エラーの原因はずっと前にわかりました。誰かがこれに賛成しているのを見たので、今これを投稿します:

MS Access は、プリペアド ステートメントをサポートしていません。

PHP では、実際のパラメーターがなく、エラー メッセージに何も関係がない場合に限り、実際に odbc_prepare() 呼び出しを使用できるため、少し混乱します。

しかし、MS ACCESS データベースで準備済みステートメントを実行することは不可能です。

于 2014-06-13T23:33:29.960 に答える