一个查询中循环的值

时间:2011-10-11 11:09:00

标签: php foreach

首先,我正在使用PDO。我相信可以使用prepare查询完成,但我不知道如何。

问题是,我得到了一个包含值的数组,我需要检查数据库中是否存在这些值。

现在,它看起来像:

foreach( $arr as $id ) {
$match =$PDO->query("SELECT `id` FROM `users` WHERE `id` = " . intval($id))->fetch();

if(isset($match['id']))
//exist
else
//not exist.
}

我不想在每个循环中运行此查询以检查数据库中是否存在$id。 那么有什么方法可以从foreach中收集所有这些值,然后运行一个查询来检查数据库中是否存在每个值?

2 个答案:

答案 0 :(得分:2)

MySQL可以处理参数列表:

SELECT field FROM table WHERE field IN (value1, value2, value3)

您可以使用PHP的join()函数从ID数组中创建逗号分隔值列表,并将其插入SQL查询中。您可以决定是否希望数据库计算结果数或仅返回所有结果。在任何一种情况下,您总共只有一个数据库查询。

答案 1 :(得分:0)

这个怎么样:

// Do query
$result = $PDO->query("SELECT `id` FROM `users` WHERE `id` IN (".implode(', ',$arr).")");

// Loop results (i.e. existing)
while ($row = $result->fetch()) {
  // Do exist action here for $row['id']
  unset($arr[array_search($row['id'],$arr)]);
}

// Loop remaining values in $arr (i.e. not existing)
foreach ($arr as $notexist) {
  // Do not exist action here
}