gpt4 book ai didi

具有相关查询的 MySql 事务

转载 作者:行者123 更新时间:2023-11-29 15:04:36 26 4
gpt4 key购买 nike

真心希望能帮到你!

我使用以下函数在 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),因为相同的“$sender_id”可以将相同的消息发送到多个“$recipient_id”。

现在的问题是,如果最后一个查询失败,我在 MAIL_MESSAGE 中有一行,而在 MAIL 中没有相应的行。我该如何解决这个问题?

交易可以提供帮助,但我不知道如何让它发挥作用!

预先感谢您的帮助。

最佳答案

在序列的开头添加“开始”以启动事务。仅当两次插入都成功时才提交事务,否则回滚事务。

我不了解 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;
}

关于具有相关查询的 MySql 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com