在 MySQL 准备语句中使用 LIMIT 关键字
在 MySQL 中使用 PDO 准备语句时,您可能会遇到 LIMIT 关键字的问题。以下查询:
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
不适用于 PDO 准备好的语句,而将其更改为 LIMIT 0, 10 则可以。这个问题的根源在于 PDO 处理参数的方式。
PDO 参数绑定
PDOStatement::execute() 默认将所有输入参数视为字符串。因此,LIMIT 子句中的参数 $min 和 $max 将作为字符串插入。然后 MySQL 会将查询解析为:
LIMIT '0', '10'
导致解析错误。
解决方案
有多种方法可以解决此问题:
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $max, PDO::PARAM_INT);
$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
通过实现一个在这些解决方案中,您可以成功地将 LIMIT 关键字与 MySQL 中的预准备语句结合使用。
以上是如何在带有 PDO 的 MySQL 准备语句中正确使用 LIMIT?的详细内容。更多信息请关注PHP中文网其他相关文章!