问题:
在 MySQL 中使用带有 LIMIT 子句的预准备语句时,当参数传递为
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
$comments = $db->prepare($query); $comments->execute(array($post, $min, $max));
答案:
出现这个问题是因为 PDOStatement::execute() 方法将所有参数都视为字符串,导致无效SQL 语句。 MySQL 不会将字符串参数转换为数字,从而导致解析错误。
解决方案:
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, 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 准备语句失败?的详细内容。更多信息请关注PHP中文网其他相关文章!