2015-09-04 41 views
1

我有一個電子郵件,發送(通過PHPMailer)當一個新用戶被添加到數據庫。如果電子郵件(密鑰)已與ON DUPLICATE KEY UPDATE函數一起存在,則數據庫將更新。但是,我不希望電子郵件在更新後發送,只有在新電子郵件發送時才發送。我如何檢查(使用PHP)SQL結果是更新還是插入,然後使用IF語句發送/不發送電子郵件?PHP電子郵件,如果SQL條目是新的,沒有電子郵件,如果更新

$sql = "INSERT INTO premium_waitinglist (date, email, ip) VALUES ('".$serverDate."', '".$_POST['user-email']."', '".$userIP."') ON DUPLICATE KEY UPDATE waiting = 1"; 
if ($conn->query($sql) == true) {} else { echo "<kbd>Error: ".$conn->error."</kbd>";} 
$mail = new PHPMailer; 

$fromEmail = $_POST['user-email']; 

$body = file_get_contents($urlBody); 

$mail->isSMTP(); 
$mail->Host = $mailHost; 
$mail->SMTPAuth = true; 
$mail->Username = $mailUsername; 
$mail->Password = $mailPassword; 
$mail->Port = 2525; 

$mail->From = $fromEmail; 
$mail->FromName = $fromName; 
$mail->addAddress($toEmail, $toName); 

$mail->Subject = $mailSubject; 

$mail->isHTML(true); 

$mail->Body = $body; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 

編輯1: 我可以調用這個錯,但$結果返回1,這似乎是正確的,但 - > affected_rows是空的。

$sql = "INSERT INTO premium_waitinglist (date, email, ip) VALUES ('".$serverDate."', '".$_POST['user-email']."', '".$userIP."') ON DUPLICATE KEY UPDATE waiting = 1"; 
$result = $conn->query($sql); 
if ($result == true) {} else { echo "<kbd>Error: ".$conn->error."</kbd>";} 
echo $result; 
echo $result->affected_rows; 

if ($result->affected_rows == 1) { 
+1

歡迎來到Stack Overflow!這個問題在信息上有點短暫。你可以分享你的嘗試,以及你遇到了什麼問題? –

+0

@JayBlanchard我更新了帖子以顯示代碼。我沒有「試過」任何東西,因爲我根本不知道如何檢查SQL查詢是否導致UPDATE或只是普通的INSERT。 –

+1

在您的數據庫中有一列標記,可能稱爲'status'。在插入時,您可以將其設置爲「已插入」。如果該標誌被「插入」並且您執行更新,則將該條目更改爲「更新」。這只是一個想法。 –

回答

1

作爲每文檔:https://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html

對於INSERT ... ON DUPLICATE密鑰更新語句,則受影響的行值是1,如果該行被插入作爲一個新的行和2如果現有的行已更新。

因此,請使用:mysql_affected_rows或任何等價物在您的未棄用/非淘汰的DB庫上。

+0

看看我的「編輯1」。不知道我做錯了什麼。 –

+0

你很容易受到[sql注入攻擊](http://bobby-tables.com)的影響。 ' - > query()'永遠不會返回「true」。它會返回一個結果對象,或者一個布爾值false。在你的情況下,它並不重要,因爲'object == true'無論如何都會起作用,但它在技術上是不正確的。 –

相關問題