我运行以下代码:
$conn = new PDO(....);
.... pdo attributes ...
$limitvalue = 0;
$limit = 10;
$sql = $conn->prepare("SELECT * FROM table1 LIMIT ?, ?");
$sql->bindParam(1, $limitvalue, PDO::PARAM_INT);
$sql->bindParam(2, $limit, PDO::PARAM_INT);
$sql->execute();
我得到:
未捕获的异常“PDOException”,消息为“SQLSTATE[42000]:
语法错误或访问冲突:1064 您的 SQL 中有错误
句法;检查与您的 MySQL 服务器版本对应的手册
在第 1 行的 'NULL, 10' 附近使用正确的语法
它只发生在这个特定的查询中。其他一切都好。
顺便说一句:我知道我为“代码内”值准备了语句可能看起来很愚蠢。但这只是一个例子。事实上,这些值取决于页码,但这里并不重要 - 这个查询也给出了相同的错误。
如果有人感兴趣的话,PHP 版本是:5.3.4RC2MySQL 是:mysqlnd 5.0.7-dev - 091210 - $修订版:304625 $
这似乎是一个php bug:PDO 忽略 PARAM_INT 常量并使用$limit
and $limitvalue
变量作为字符串。绑定时在查询中引用它们。
尝试使用:
$sql->bindParam(1, (int)$limitvalue, PDO::PARAM_INT);
$sql->bindParam(2, (int)$limit, PDO::PARAM_INT);
强制变量类型为 int。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)