【问题标题】:DELETE FROM NOT IN not working with PHP arrayDELETE FROM NOT IN 不使用 PHP 数组
【发布时间】:2012-08-31 08:17:13
【问题描述】:

我有一个这样的数组

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);

谁能告诉我哪里出错了?

谢谢

彼得

【问题讨论】:

  • 您需要像@Omesh 在他的回答中提出的那样将数组转换为文本形式
  • 希望你确定数组元素不能包含SQL。否则,请查看prepared statements

标签: php mysql database arrays notin


【解决方案1】:

你需要在php中使用implode函数将隐蔽数组导入字符串。

还需要用引号将电子邮件的字符串值括起来:

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

【讨论】:

    【解决方案2】:

    也许:

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

    【讨论】:

    • @PeterStuart 不同之处在于implode,它将每个电子邮件地址很好地封装在单引号中。 +1(我读了三遍才发现区别)
    【解决方案3】:

    您缺少引号:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        您更有可能没有在查询中使用引号括起单个电子邮件。 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 个人发布与我相同的答案! >:|

        【讨论】:

          【解决方案6】:

          请试试这个。

          $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);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-12-02
            • 2021-03-13
            • 2016-03-19
            • 1970-01-01
            • 1970-01-01
            • 2013-06-17
            • 2022-12-27
            相关资源
            最近更新 更多