首页 > 数据库 > mysql教程 > 为什么使用字符串参数时,带有 LIMIT 的 MySQL 准备语句失败?

为什么使用字符串参数时,带有 LIMIT 的 MySQL 准备语句失败?

Susan Sarandon
发布: 2024-12-06 15:01:11
原创
1032 人浏览过

Why Does My MySQL Prepared Statement with LIMIT Fail When Using String Parameters?

MySQL 上带有预准备语句的 LIMIT 关键字

问题:

在 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);
登录后复制
  • 使用 sprintf() 硬编码数字参数:
$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中文网其他相关文章!

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