我查了一下: How do I use pdo's prepared statement for order by and limit clauses?
但它没有谈到“?”占位符。
我有这样的陈述:
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array($max_num));
但它不起作用,因为LIMIT号码不应该首先用括号括起来。
我该如何解决这个问题?提前致谢。
答案 0 :(得分:2)
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array($max_num));
上述查询无效,因为参数需要一个整数,当您以上述方式绑定它时,该值将绑定到一个字符串。
因此,解释的查询采用以下形式:
select * from users limit '1'
您应该按以下方式修改查询:
$stmt->bindValue(1,1,PDO::PARAM_INT);
$stmt->execute();
答案 1 :(得分:1)
$connect->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array((int)$max_num));
答案 2 :(得分:0)
尝试
$stmt->execute(array((int)$max_num));
如果这不起作用,请尝试
$stmt->bindParam(1, (int)$max, PDO::PARAM_INT);
$stmt->execute();
答案 3 :(得分:-2)
看起来PDO不了解LIMIT就知道它是一个数值。你可能不得不忍受
$connect->query("SELECT * FROM users LIMIT $max_num");