2011-10-11 32 views
0

首先,我正在使用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. 
} 

我不wan't在每個循環運行此查詢,以檢查是否存在於數據庫中的$id。 那麼有什麼辦法,從foreach收集所有這些值,然後運行一個查詢來檢查數據庫中是否存在每個值?

回答

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 
} 
+0

尼斯之一!謝謝! – Isarius

2

MySQL能夠處理的參數列表:

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

您可以使用PHP的join()功能,從您的ID陣列創建逗號分隔值的列表,並把它插入到SQL查詢。您可以決定是否希望數據庫計算結果數量或僅返回所有結果數量。無論哪種情況,您將只有一個數據庫查詢。