Mysqli multi_query

时间:2017-07-22 21:48:20

标签: php mysql mysqli

我有两个非常相似的脚本 - 一个预定脚本,另一个通过加载PHP页面触发 - 下载和解析电子邮件,然后将我需要的各种信息插入到3个表中。我一直在使用的查询的简化版本是:

INSERT INTO mailids () VALUES ();  
SET @mysql_mid = LAST_INSERT_ID();  
INSERT INTO mail (  
    mail_mid,   
    mail_owner_id,   
    mail_recipient,   
    mail_sender,   
    mail_subject,   
    mail_sent_date   
) VALUES (  
    @mysql_mid,   
    '$userId',   
    '$recipient',   
    '$sender',   
    '$subject',  
    FROM_UNIXTIME('$sentDate')  
);  
SET @mysql_mail_id = LAST_INSERT_ID();  
INSERT INTO mail_body (  
    mail_id,  
    mail_body  
) VALUES (  
    @mysql_mail_id,  
    '$body'  
);  
UPDATE mailids SET mid_rec_ids = @mysql_mail_id WHERE mid_id = @mysql_mid;  

除非两个脚本同时运行,否则这样工作正常,在这种情况下,两者都将电子邮件插入数据库,导致重复输入。

我希望做的是在我的multi_query的开头添加一个SELECT语句,后跟一个IF语句(我没有经验),如果电子邮件尚不存在,它只会执行上述查询。换句话说:

SELECT COUNT(*) AS mail_count FROM mail WHERE mail_owner_id = '$user_id AND mail_recipient = '$recipient' AND mail_sender = '$sender' AND mail_subject = '$subject' AND mail_sent_date = '$sent_date';

IF mail_count < 1  
THEN   
    (INSERT ABOVE QUERY HERE)  
END IF

我没有尝试过任何工作。我已经尝试设置一个变量(@mail_count),使用WHERE NOT EXISTS(由于某种原因,使用我的user_id插入一些等于所有记录的记录)和大约100个其他我不记得的事情。我考虑过使用PDO,但项目的其余部分是mysqli,我担心PDO在这个项目时间表中的学习曲线。

有人可以帮忙吗?

0 个答案:

没有答案