首页 > 后端开发 > php教程 > 为什么 LIMIT 不能与 MySQL 中的预准备语句一起使用?

为什么 LIMIT 不能与 MySQL 中的预准备语句一起使用?

Barbara Streisand
发布: 2024-11-26 19:27:10
原创
846 人浏览过

Why Doesn't LIMIT Work with Prepared Statements in MySQL?

MySQL 中预准备语句的 LIMIT 关键字

此问题解决了使用预准备语句时 LIMIT 子句无法按预期工作的问题使用 MySQL 中的 PDO 库。

在提供的代码中snippet:

<pre class="brush:php;toolbar:false">
$comments = $db->prepare($query); 
/* where $db is the PDO object */ 
$comments->execute(array($post, $min, $max)); 
登录后复制

PDOStatement::execute 方法将参数 $min 和 $max 视为字符串。因此,最终的 SQL 语句变为:

LIMIT '0', '10'
登录后复制

,这会导致语法错误,因为 MySQL 需要 LIMIT 子句的数值。

可能的解决方案:

要解决此问题,请考虑以下事项options:

  • 手动绑定参数:

    • 使用bindParam将每个参数与适当的类型绑定。
    • For示例: $comments->bindParam(2, $min, PDO::PARAM_INT);
  • 使用字符串插值:

    • 将 $min 和 $max 值直接嵌入到查询字符串使用sprintf.
    • 示例:

      $query = sprintf('SELECT id, content, date
      FROM comment
      WHERE post = ?
      ORDER BY date DESC
      LIMIT %d, %d', $min, $max);
      登录后复制
  • 禁用模拟准备:

    • 设置PDO::ATTR_EMULATE_PREPARES 属性设置为 FALSE,以防止 MySQL 引用数字参数。
    • 示例: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

注意:
这些方法将使您能够正确使用 LIMIT 子句和准备好的语句。

以上是为什么 LIMIT 不能与 MySQL 中的预准备语句一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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