gpt4 book ai didi

mysql - Codeigniter 中具有多个表的事务

转载 作者:行者123 更新时间:2023-11-29 06:22:04 24 4
gpt4 key购买 nike

我对一般事务很陌生,尤其是 CodeIgniter。我正在使用 InnoDB 和其他所有东西,但我的事务在我想要的时候并没有回滚。这是我的代码(稍微简化)。

            $dog_db = $this->load->database('dog', true);
$dog_db->trans_begin();

$dog_id = $this->dogs->insert($new_dog); //Gets primary key of insert
if(!$dog_id)
{
$dog_db->trans_rollback();
throw new Exception('We have had an error trying to add this dog. Please go back and try again.');
}

$new_review['dog_id'] = $dog_id;
$new_review['user_id'] = $user_id;
$new_review['date_added'] = time();

if(!$this->reviews->insert($new_review)) //If the insert fails
{
$dog_db->trans_rollback();
throw new Exception('We have had an error trying to add this dog. Please go back and try again.');
}

//ADD DESCRIPTION
$new_description['description'] = $add_dog['description'];
$new_description['dog_id'] = $dog_id;
$new_description['user_id'] = $user_id;
$new_description['date_added'] = time();

if(!$this->descriptions->insert($new_description))
{
$dog_db->trans_rollback();
throw new Exception('We have had an error trying to add this dog. Please go back and try again.');
}

$dog_db->trans_rollback(); //THIS IS JUST TO SEE IF IT WORKS
throw new Exception('We have had an error trying to add this dog. Please go back and try again.');

$dog_db->trans_commit();
}

catch(Exception $e)
{
echo $e->getMessage();
}

我没有收到任何错误消息,但也没有回滚。它应该在提交之前的最后一个 trans_rollback 处回滚。我的模型都在“狗”数据库上,所以我认为事务将带入模型的功能中。也许你只是不能使用这样的模型。任何帮助将不胜感激!谢谢!

最佳答案

好吧,我知道这篇文章已经过时了,但这是我的 2 美分:

我不这么认为:

if(!$this->descriptions->insert($new_description))

将起作用,因为 CI 事件记录的插入函数始终返回 TRUE(成功与否)。如果您使用 Debug模式,CI 将在错误时停止并向用户抛出一条屏幕消息,但插入函数仍将返回 TRUE。

因此,如果您愿意使用 CI“手动”控制事务,则必须使用如下内容:

...

$this->db->trans_begin();

$this->db->insert('FOO');

if ($this->db->trans_status() === FALSE){

$this->db->trans_rollback();

}else{

$this->db->trans_commit();

}

希望这可以帮助某人...某个时候...某个地方

关于mysql - Codeigniter 中具有多个表的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671905/

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