DELETE FROM NOT IN不使用PHP数组

时间:2012-09-06 13:33:39

标签: php mysql database arrays notin

我有一个像这样的数组

array([0]=> 'email@email.com', [1]=> 'email2@email.com', [2]=> 'email3@email.com');

我还有一张桌子上有很多电子邮件。

我希望能够删除除阵列中的所有电子邮件之外的所有电子邮件。

我试过这段代码但没有任何反应:

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

谁能告诉我哪里出错了?

由于

彼得

6 个答案:

答案 0 :(得分:4)

你需要在php中使用implode函数将convert数组导入到字符串中。 还需要在引号中包含电子邮件的字符串值:

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

答案 1 :(得分:3)

也许:

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

答案 2 :(得分:0)

你缺少引号:

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

答案 3 :(得分:0)

您的数组包含文字,但这些文字并不是每个都被IN列表的引号包围。

答案 4 :(得分: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个人怎么敢和我发布相同的答案! >:|

答案 5 :(得分: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);