2012-09-06 70 views
1

工作,我有這樣的DELETE FROM NOT IN不能與PHP數組

array([0]=> '[email protected]', [1]=> '[email protected]', [2]=> '[email protected]'); 

數組我也有一個桌子,上面有電子郵件hunders。

我想能夠刪除數組中的所有這些電子郵件。

我想這個代碼,但沒有任何反應:

$emails = join(', ', $emails); 
    $sql = "DELETE FROM emails WHERE customer_id='".$id."' AND email NOT IN(".$emails.")"; 
    $query = $this->db->query($sql); 

誰能告訴我在哪裏,我錯了?

感謝

彼得

+0

NOT IN('」 $電子郵件。「')」; –

+0

你需要數組轉換爲文本格式如@Omesh在他的回答 – rkosegi

+0

我希望你是一定的,數組元素不能包含SQL建議。否則,請查看[prepared statements](http://stackoverflow.com/a/60496/623041) – eggyal

回答

4

您需要在PHP中使用implode功能導入隱蔽數組的字符串。

還需要用引號括電子郵件的字符串值:

$sql = "DELETE FROM emails WHERE customer_id='".$id."' AND 
     email NOT IN('".implode("','",$emails)."')"; 
3

可能:

$emails = implode("', '", $emails); 
$sql = "DELETE FROM emails WHERE customer_id='".$id."' AND email NOT IN('".$emails."')"; 
$query = $this->db->query($sql); 
+0

@PeterStuart不同之處在於'implode',它會很好地將每個電子郵件地址封裝在單引號中。 (在我注意到其中的差異之前,我讀了三遍) – Fluffeh

0

你缺少報價:

$emails = implode("', '", $emails); 
$sql = "DELETE FROM emails WHERE customer_id='".$id."' AND email NOT IN('".$emails."')"; 
$query = $this->db->query($sql); 
0

你的數組包含文字,但這些不是每個人都被您的IN列表中的引號包圍。

0

這很可能是因爲您沒有在查詢中用引號包裝單個電子郵件。 mysql_error應該選擇了,但肯定嗎?

$emails = join('", "', $emails); 
$sql = 'DELETE FROM emails WHERE customer_id="'.$id.'" AND email NOT IN("'.$emails.'")'; 
$query = $this->db->query($sql); 

試着回顯出$ sql,看看你得到了什麼(在這裏發佈它,如果它沒有多大意義)。

編輯:當我輸入我的答案時,如何敢於2人發佈與我相同的答案! >:|

0

請試試這個。

$emails = join(',', $emails); 
To avoid comma in last , 
$emails=trim($emails,','); 
$sql = "DELETE FROM emails WHERE customer_id='".$id."' AND email NOT IN(".$emails.")"; 
$res = $this->db->query($sql); 
相關問題