2011-02-08 100 views
1

我有一個這樣的查詢與IN子句PHP數組MySQL查詢

SQL = 「

某些查詢 WHERE some_item IN()

」;

我必須做一個for循環來把php數組的所有項放到IN子句中,還是有一個函數或方法來做到這一點?

+0

注意:您可以[格式線爲代碼(http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-塊)通過縮進它們四個空格。編輯器工具欄中的「{}」按鈕可以爲您做到這一點。編輯你的問題並嘗試一下。單擊編輯器工具欄中的橙色問號以獲取更多信息和格式化提示。 – outis 2011-04-23 20:04:34

回答

0

你可以嘗試破滅

$item_ids = array(1, 2, 3, 4, 5); // somehow populate this array 
$item_list = implode(',', $item_ids); 

$sql = "SOME QUERY WHERE some_item IN ({$item_list})"; 
0

您可以使用implode,如:

$ids = array(1, 2, 3); 
$query = 'SELECT * FROM items WHERE id IN(' . implode(',', $ids) . ')'; 
+0

非常感謝你! – Alexander 2011-02-08 09:48:37

1

對於數組中的數值:

sprintf("... WHERE some_item IN (%s) ...",implode(",",$numeric_array)); 

對於字符串值:

sprintf("... WHERE some_item IN ('%s') ...",implode("','",$escaped_string_array)); 

要小心,以逃避當值構建陣列。

希望這會有所幫助!

+1

你可以做一個array_filter()之前調用轉義方法等http://php.net/manual/en/function.array-filter.php – dogmatic69 2011-02-08 11:07:45

+0

+1有用的評論,謝謝:) – aorcsik 2011-02-08 11:09:24

1

如果你有一個數組中的東西的列表,你可以使用JOIN來爲你構建它。這對於數字值來說是最簡單的,因爲你不需要引用任何事物。事情是這樣的:

$sql = 'SOME QUERY WHERE some_item IN (' . join(',', $a_myData) . ')'; 

如果陣列包含字符串,你應該爲你把數據放入數組逃脫數據。但一旦你做完了,你可以做類似於上面的事情,添加引號。

$sql = 'SOME QUERY WHERE some_item IN ("' . join('","', $a_myData) . '")'; 

一個潛在的問題是一個空數組,因爲上面的例子會給你IN (""),這有可能匹配你不想要的東西。

上面的例子也沒有考慮NULL值。一種解決方法是用引號已經在其周圍的字符串填充你的數組(因此你可以使用NULL作爲它自己的值)。