Php 在一个查询中来自循环的值
首先,我使用PDO。我相信它可以通过Php 在一个查询中来自循环的值,php,foreach,Php,Foreach,首先,我使用PDO。我相信它可以通过preparequery来完成,但我不知道怎么做 问题是,我得到了一个包含值的数组,我需要检查数据库中是否存在这些值 现在,它看起来像: foreach( $arr as $id ) { $match =$PDO->query("SELECT `id` FROM `users` WHERE `id` = " . intval($id))->fetch(); if(isset($match['id'])) //exist else //not ex
prepare
query来完成,但我不知道怎么做
问题是,我得到了一个包含值的数组,我需要检查数据库中是否存在这些值
现在,它看起来像:
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收集所有这些值,然后运行一个查询来检查数据库中是否存在每个值?MySQL可以处理参数列表:
SELECT field FROM table WHERE field IN (value1, value2, value3)
您可以使用PHP的join()
函数从ID数组中创建逗号分隔值列表,并将其插入SQL查询。您可以决定是希望数据库统计结果的数量,还是只返回所有结果。在这两种情况下,您总共只有一个数据库查询。这样如何:
// 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
}