2010-03-12 93 views
0

我真的希望你能幫忙!帶有依賴查詢的MySql轉換

我使用下面的函數在我的PHP發送郵件/ MySQL的應用:

public function sendMail($sender_id, $recipient_id, $subject, $message) { 
     $q = "INSERT INTO MAIL_MESSAGE (subject, message, date) VALUES ('$subject', '$message', NOW())"; 
     $s = mysql_query($q); 
     if (mysql_affected_rows()==1) { 
      $message_id = mysql_insert_id();  
      $q = "INSERT INTO MAIL (user_id, sender, message_id) VALUES ('$recipient_id','$sender_id','$message_id')"; 
      $s = mysql_query($q); 
      if (mysql_affected_rows()==1) 
       return true; 
     } 
     return false; 
    } 

我用兩個表(MAIL_MESSAGE和MAIL)becuse相同的「$ SENDER_ID」可以發送相同的消息給多個'$ recipient_id'。

現在的問題是,如果最後一次查詢失敗,我有MAIL_MESSAGE行沒有MAIL通訊行。 我該如何解決這個問題?

交易可以幫助,但我不知道如何使它工作!

在此先感謝您的幫助。

回答

1

在序列的開始處添加「begin」以開始事務。僅在兩個插入成功時提交事務,否則回滾事務。

我不知道PHP,但基於你的樣品看起來會像下面這樣:

public function sendMail($sender_id, $recipient_id, $subject, $message) { 
     $s = mysql_query("begin"); 
     $q = "INSERT INTO MAIL_MESSAGE (subject, message, date) VALUES ('$subject', '$message', NOW())"; 
     $s = mysql_query($q); 
     if (mysql_affected_rows()==1) { 
      $message_id = mysql_insert_id();  
      $q = "INSERT INTO MAIL (user_id, sender, message_id) VALUES ('$recipient_id','$sender_id','$message_id')"; 
      $s = mysql_query($q); 
      if (mysql_affected_rows()==1) { 
       $s = mysql_query("commit"); 
       return true; 
     } 
     $s = mysql_query("rollback"); 
     return false; 
    }