odbc_execute 参数不起作用(空警告)

Posted

技术标签:

【中文标题】odbc_execute 参数不起作用(空警告)【英文标题】:odbc_execute with parameters not working (empty warning) 【发布时间】:2012-10-01 12:28:09 【问题描述】:

我正在尝试对 MS-Access 数据库执行简单的选择查询。 当然我想防止 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,MS Access Driver应该是最新版本

【问题讨论】:

【参考方案1】:

我很久以前就找到了错误的原因。我看到有人支持这个,所以我现在发布这个:

MS Access 根本不支持准备好的语句!

这有点令人困惑,因为 PHP 实际上允许您使用 odbc_prepare() 调用,只要没有实际参数并且错误消息没有说明任何相关内容。

但是不可能使用 MS ACCESS 数据库执行准备好的语句。

【讨论】:

以上是关于odbc_execute 参数不起作用(空警告)的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine DBAL 参数不起作用

数据表警告:Json 响应不起作用

使用开发安装后,警告对未解决的引用不起作用

Python:检查“字典”是不是为空似乎不起作用

切换播放/暂停不起作用

cURL 有时不起作用并给出空结果