2013-10-25 96 views
2

當我嘗試在NOT IN子句中使用我的$name_array變量進行選擇時,出現數組轉爲字符串轉換警告。我嘗試了大量不同的引用組合,但是我得到一個語法錯誤或一個數組到字符串轉換警告。任何人都可以看到我在這裏做錯了什麼。謝謝。從表中選擇不在php數組查詢不起作用

$db->query("SELECT contactname 
      FROM contacts 
      WHERE contactname 
      NOT IN (' . implode(",", $name_array) . ') 
      "); 
+0

您需要周圍的名字報價:'在( '約翰', '彼得', '傑克')' –

+1

$ DB->查詢(「選擇聯繫人姓名 FROM聯繫人 WHERE contactname NOT IN('「。implode(」,「,$ name_array)。」') 「); implode應該沒有引號 – ManZzup

+0

@ManZzup:這是行不通的。 –

回答

5

您需要在將每個名稱壓入列表前加上引號。

$names = implode(",", array_map(function($x) { return "'$x'"; }, $name_array)); 
$db->query("SELECT contactname 
      FROM contacts 
      WHERE contactname 
      NOT IN ($names) 
      "); 
+0

我試過這個,我真的認爲它會工作,因爲它似乎解決了索引的引號問題。但由於某種原因,我仍然得到爆炸數組字符串警告。但仍然+1,因爲它應該已經解決了這個問題。 – user2014429

+0

更新 - 有一些無關的東西阻止了它的工作,現在代碼很好用。非常感謝你。 – user2014429

2

嘗試使用FIND_IN_SET()

$db->query("SELECT contactname 
      FROM contacts 
      WHERE NOT FIND_IN_SET(contactname, \'' . implode(",", $name_array) . '\') 
      "); 
1
$db->query("SELECT contactname 
      FROM contacts 
      WHERE contactname 
      NOT IN ('".implode("','",$name_array).'\')'); 
3

你必須在引用名稱 '' 由於字符串,請使用。

$val="'"; 
$val.=implode("','",$name_array); 
$val.="'"; 
$db->query("SELECT contactname FROM contacts WHERE contactname NOT IN ($val) "); 

這將挑釁幫助你