我运行以下代码:
$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 $
答案 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。