【问题标题】:PHP repeating SQL queries for each array's item efficientlyPHP有效地为每个数组的项目重复SQL查询
【发布时间】:2016-07-07 04:48:11
【问题描述】:

对数组中的每个项目运行 SQL 查询的最佳方式是什么?

我有 $array 的代码:

Array
(
  [0] => 12345
  [1] => 12346
  [3] => 12347
)

现在我想为 $array 中的每个项目运行以下 SQL 查询:

SELECT * FROM `TABLE` a WHERE a.`Code` = :code

我一直在使用的 PHP:

$results = array();

$statement = $pdo->prepare($sql);
$statement->bindParam(':code', $value);

foreach ($array as $key => $value) {
    $statement->execute();

    while (($results = $statement->fetch(PDO::FETCH_ASSOC)) !== false) {
        echo $results;
    }
} 

【问题讨论】:

  • 当 MySQL 游标被消耗时,您需要再次执行查询。据我所知,除了 MySQL 缓存之外,没有其他方法可以避免另一个查询。
  • 也许这会有所帮助:stackoverflow.com/questions/14103202/…
  • 你为什么要这样做?
  • SELECT * FROM TABLE A WHERE a.Code in :array

标签: php mysql arrays pdo


【解决方案1】:

您可以运行一个查询然后循环遍历结果,而不是运行多个查询:

SELECT * FROM `TABLE` a WHERE a.`Code` IN (:codes);

在你的 PHP 中会是这样的:

$question_marks = str_repeat("?,", count($array_of_codes)-1) . "?"; 
$statement = $pdo->prepare($sql);
$statement->bindParam(:codes, $question_marks);
$statement->execute($array_of_codes);

while (($results = $statement->fetch(PDO::FETCH_ASSOC)) !== FALSE) {
  echo $results;
}

$array_of_codes 是您的 PHP 数组,其中包含您要查找的每个结果的 Code 参数。

归于应得的原因This question 帮助了解了如何使用 PDO 进行 WHERE...IN 查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2017-07-12
    • 2017-02-15
    • 2023-04-06
    相关资源
    最近更新 更多