PDO Mysql语法错误1064

时间:2011-07-21 13:52:40

标签: php mysql pdo mysql-error-1064

我运行以下代码:

$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();

我得到了:

  

带有消息'SQLSTATE [42000]的未捕获异常'PDOException':   语法错误或访问冲突:1064 SQL中有错误   句法;查看与MySQL服务器版本对应的手册   要使用正确的语法,请在第1行“NULL,10”附近使用

仅在此特定查询中才会发生。其他一切都还可以。

顺便说一下:我知道我为“代码内”值准备语句可能看起来很愚蠢。但这只是一个例子。实际上这些值取决于页码,但这里没关系 - 这个查询也给出了同样的错误。


如果有人感兴趣,PHP版本为: 5.3.4RC2 ,MySQL版本为: mysqlnd 5.0.7-dev - 091210 - $ Revision:304625 $

2 个答案:

答案 0 :(得分:4)

这似乎是php bug:PDO忽略PARAM_INT常量并使用$limit$limitvalue变量作为字符串。绑定时在查询中引用的内容。

尝试使用:

$sql->bindParam(1, (int)$limitvalue, PDO::PARAM_INT);
$sql->bindParam(2, (int)$limit, PDO::PARAM_INT);

强制变量类型为int。

答案 1 :(得分:-2)

我不认为sql中限制的第一个参数可以为NULL。如果您只想要前10条记录,则使用LIMIT 10。