首页 > 后端开发 > php教程 > 如何在带有 PDO 的 MySQL 准备语句中正确使用 LIMIT?

如何在带有 PDO 的 MySQL 准备语句中正确使用 LIMIT?

DDD
发布: 2024-11-27 15:57:14
原创
997 人浏览过

How to Correctly Use LIMIT in MySQL Prepared Statements with PDO?

在 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'
登录后复制

导致解析错误。

解决方案

有多种方法可以解决此问题:

  • 单独绑定参数:指定使用bindParam()的每个参数的类型:
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $max, PDO::PARAM_INT);
登录后复制
  • 从查询中排除参数:从查询中删除$min和$max参数并指定它们作为查询:
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
登录后复制
  • 禁用模拟准备:在 MySQL 驱动程序中禁用模拟准备:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
登录后复制

通过实现一个在这些解决方案中,您可以成功地将 LIMIT 关键字与 MySQL 中的预准备语句结合使用。

以上是如何在带有 PDO 的 MySQL 准备语句中正确使用 LIMIT?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板