2016-03-20 18 views
0

对数组中的每个项目运行SQL查询的最佳方式是什么?PHP为每个数组的项目有效地重复SQL查询

我有代码的$阵列

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

现在,我想给$阵列中运行以下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; 
    } 
} 
+0

当使用MySQL游标时,您需要再次执行查询。据我所知,除了MySQL缓存外,没有办法避免另一个查询。 –

+0

也许这可能会有所帮助:http://stackoverflow.com/questions/14103202/how-to-fetch-2-times-in-mysql-pdo-without-fetchall –

+0

你为什么要这么做? – Strawberry

回答

0

而不是运行多个查询,你可以在结果上运行一个查询,然后循环:

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帮助如何处理WHERE ... IN与PDO的查询。