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

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

Barbara Streisand
Barbara Streisand原创
2024-11-26 19:27:10799浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn