首页 >后端开发 >php教程 >如何处理 MySQL 准备语句中动态大小的参数列表?

如何处理 MySQL 准备语句中动态大小的参数列表?

DDD
DDD原创
2024-12-03 03:14:09402浏览

How to Handle Dynamically Sized Parameter Lists in MySQL Prepared Statements?

MySQL 准备语句中动态调整大小的参数列表

在 PHP 中构建 MySQL 准备语句时,出现了如何处理参数数量可变的查询的问题。例如,考虑这样的查询:

SELECT `age`, `name` FROM `people` WHERE id IN (12, 45, 65, 33)

IN 子句中的 ID 数量随每次执行而变化。

可能的解决方案

存在多种方法来解决此挑战:

  1. 解决方案 1:虚拟变量和多次调用

    • 创建一个接受固定数量变量(例如 100 个)的语句,并用虚拟值填充未使用的槽。
    • 对更大的变量执行多个调用
  2. 解决方案 2:非准备查询

    • 动态构建查询并执行它,确保严格的保护反对注射

最佳解决方案

但是,其他选项提供更好的效率:

  1. 临时表方法

    • 创建一个临时表,并将每个参数值插入其中。
    • 对临时表执行简单联接。
  2. 动态 IN 子句

    • 使用 implode 和数组预填充,使用 IN 子句的占位符动态构造查询
    • 例如:

      $dbh = new PDO(...);
      $parms = [12, 45, 65, 33];
      $inclause = implode(',', array_fill(0, count($parms), '?')); // = ?,?,?,?
      $preparesql = sprintf('SELECT age, name FROM people WHERE id IN (%s)', $inclause);
      $st = $dbh->prepare($preparesql);
      $st->execute($parms);

第一种方法对于大集合可能更有效,而第二种方法是适合较小的。

以上是如何处理 MySQL 准备语句中动态大小的参数列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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