Mysql 通过控件添加重复的数据


Mysql add duplicated data although the controls

我在 mysql 表中添加数据时遇到问题。我创建了一个简单的时事通讯系统。系统将发送的电子邮件地址添加到任务表中,如果已经发送,则在发送之前进行检查。但是每次都会添加重复的记录,例如;我的电子邮件列表包含 3000 条记录,但表格显示 6000 条记录。

这是我的表结构和查询;

订户表

ID   subscriber_mail
--------------------
1    mail1@gmail.com
2    mail2@gmail.com
3    mail3@gmail.com
4    mail4@gmail.com

任务表

ID   subscriber_mail  CID
---------------------------
1    mail1@gmail.com    1
2    mail2@gmail.com    1
3    mail3@gmail.com    1
4    mail4@gmail.com    1

订阅者获取和记录

 $query = "
    SELECT 
            S.* 
    FROM 
            subscribers AS S
            LEFT JOIN tasks AS T ON (T.CID=". CAMPAIGN_ID ." AND S.subscriber_mail=T.subscriber_mail)
            LEFT JOIN unsubscribes AS U ON (U.CID=". CAMPAIGN_ID ." AND S.subscriber_mail=U.subscriber_mail)
    WHERE
                (T.subscriber_mail IS NULL) 
            AND (U.subscriber_mail IS NULL) 
    ";

$opSubs = $myconn->query($query) or die(mysqli_error($myconn));
while($opSubsRs = $opSubs->fetch_assoc()){
     -- SMTP connection --
     if($mail->Send()){
         $myconn->query("INSERT INTO tasks SET
                CID=1,
                subscriber_mail='". $opSubsRs['subscriber_mail'] ."'
        ");
     }
}

因此,该系统适用于我的本地主机和Namecheap,Godaddy,没有重复的记录,但是一些托管服务在任务表中添加了相同的记录。可能是sql_modeNULLBINARY问题?使用 MyISAM 的数据库引擎。

问候。

当您插入表格时,您应该检查电子邮件是否已存在。

$query = "SELECT email from subscribers";

获取该查询,然后在之后检查电子邮件是否存在

if($query->fetch->rowcount < 1){
$query = "Insert into subscribers(email) values (email)"
}

您也不应该手动插入 id,只需打开自动增量即可。