怎么用?占位符与SQL语句涉及“LIMIT?”?

时间:2012-05-21 19:02:39

标签: php mysql

我查了一下: 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号码不应该首先用括号括起来。

我该如何解决这个问题?提前致谢。

4 个答案:

答案 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");