2

我检查了这个: 如何将 pdo 的准备好的语句用于 order by 和 limit 子句?

但它没有谈论“?” 占位符。

我有这样的声明:

$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array($max_num));

但它不起作用,因为 LIMIT 数字首先不应该用括号括起来。

我怎么解决这个问题?提前致谢。

4

4 回答 4

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();
于 2012-05-21T20:42:36.857 回答
1
$connect->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array((int)$max_num));
于 2012-05-21T19:30:00.963 回答
0

尝试

$stmt->execute(array((int)$max_num));

或者如果这不起作用,请尝试

$stmt->bindParam(1, (int)$max, PDO::PARAM_INT);
$stmt->execute();
于 2012-05-21T19:12:26.057 回答
-2

看起来 PDO 不理解 LIMIT 以知道它是一个数值。你可能不得不忍受

$connect->query("SELECT * FROM users LIMIT $max_num"); 
于 2012-05-21T19:14:21.703 回答