2012-03-08 95 views
20

我有和兩個值的數組,我想在選擇查詢中使用它與SQL IN運算符。如何在sql IN運算符中使用php數組?

這裏是我的表

id comp_id 
1 2 
2 3 
3 1 

我有一個數組$arr它有兩個值Array ([0] => 1 [1] => 2)

我想獲取comp_id 1的記錄和comp_id結構2,所以我寫了下面的查詢。

SELECT * from table Where comp_id IN ($arr) 

但它不返回結果。

+3

第1步是調試你自己的代碼。如果你打印出你發送給MySQL的查詢,你會看到'SELECT * from table where comp_id IN(Array)'不正確。嘗試將數組連接到一個字符串不會自動將其轉換爲逗號分隔的單詞列表。 – 2012-03-08 13:23:24

+4

第二步是搜索SO找出這個問題已經被回答了幾千次 – 2012-03-08 13:25:02

+0

我對這個問題回答了,它也會解決你的問題。 http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition/36070527#36070527 – 4EACH 2016-03-17 20:09:06

回答

48
$sql = "SELECT * from table Where comp_id IN (".implode(',',$arr).")"; 
+0

我用這種方法,它工作正常,但警告警告:implode()[function.implode]:在第81行中傳遞的C:\ wamp \ www \ x \ x \ x \ xxx.php中無效的參數 – Ahmad 2012-03-08 13:43:04

+1

@Ahmad您的'$ arr'最有可能不是數組。檢查您是否正確構建它。 – jprofitt 2012-03-08 13:51:57

+2

它會檢索到相同的結果,但它不是最好的答案,你發現對SQL注入攻擊, 我就這個問題回答,它也會解決你的問題。 http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition/36070527#36070527 – 4EACH 2016-03-17 20:09:02

4

$ ARR是一個PHP數組,你需要發送,將被解析 你需要把你的數組列表中的像1,2,等字符串的SQL服務器..

要做到這一點,你可以使用函數http://php.net/implode

所以運行查詢之前嘗試

$arr = implode (', ', $arr); 
+0

我用這種方法,它工作正常,但警告'警告:implode()[function.implode]:無效參數傳遞在C:\ wamp \ www \ x \ x \ x \ xxx.php在81行上' – Ahmad 2012-03-08 13:43:20

+0

@Ahmad這很奇怪..也許對於你沒有該數組中的元素或變量尚未初始化的情況..? – mishu 2012-03-08 13:52:07

+0

看到我上面的評論。這對於數組中的字符串值不起作用。 – CXJ 2017-12-08 15:24:38

12

您需要將數組轉換成逗號分隔的字符串:

$condition = implode(', ', $arr); 

,另外,你可能想先逃脫值(如果您不確定輸入):

$condition = implode(', ', array_map('mysql_real_escape_string', $arr)); 
4

您需要爆你的陣列「」逗號

$imploded_arr = implode(',', $arr); 

SELECT * from table Where comp_id IN ($imploded_arr) 
2

你需要的東西,如:

$sql = "SELECT * from table where comp_id in (".implode(',',$arr.")"; 
2

您需要將您的$arr實際轉換爲字符串。你在做什麼,最簡單的方法是使用implode()

$query = 'SELECT * from table Where comp_id IN (' . implode(',', $arr) . ')'; 

現在,如果你echo查詢,你會看到,而不是數組中的IN聲明時,它也只是單詞「陣列」

2

您需要將數組轉換爲字符串在查詢中使用:

$list = implode(',', $arr); 

然後,它可以在IN子句中使用:

SELECT * from table Where comp_id IN ($list) 
+0

對字符串值不起作用,因爲使用implode你得到一個字符串,而不是單獨的字符串值所需的SQL查詢 – 2017-03-28 17:02:54

+0

正確答案在這裏http://stackoverflow.com/questions/18072185/formatting-a-php-array-for-an-sql-in-clauses – 2017-03-28 17:32:20

3

你混合PHP和SQL - 爲IN SQL操作,你需要像一個格式:

SELECT * from table WHERE comp_id IN (1,2) 

因此,要獲得在PHP你需要做的是這樣的:

$sql = "SELECT * from table Where comp_id IN (".implode(',',$arr).")" 

請記住,這隻適用於數組包含整數的情況。如果它們是字符串,則必須轉義每個元素。

3

你只能傳遞字符串MySQL作爲查詢,所以試試這個

mysql_query("SELECT * FROM table WHERE comp_id IN (".implode(',',$arr).")"); 
2

這裏所有的人都提出了同樣的事情,但我得到了,因爲一個簡單的錯誤,在WordPress警告。 你需要給你的內爆字符串加逗號。準確地說是這樣的。

$query = "SELECT *FROM table Where comp_id IN ('" . implode("', '", $sanitized_brands) . "')"; 

希望能幫助像我這樣的人。 :)