gpt4 book ai didi

php - 建议,php mysql transaction for insertion to multiple tables in a block

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

我需要对一段代码使用事务,它由多个插入组成。将整个代码块放在 try catch block 中,在 try..catch block 之前开始事务是一种好习惯。然后对于捕获到的任何异常,回滚其他提交的事务。

基本问题:

  • 在单个事务周期内包含整个代码块是否是一种不好的做法?
  • 如果这是一种不好的做法,那么处理它的好方法是什么?为什么?

这是一段代码:

    $con = Propel::getConnection(SomeTablePeer::DATABASE_NAME);        
$con->beginTransaction();
try {
$currentRevision = $budgetPeriod->getRevision();
$newRevision = $currentRevision->copy();
$newRevision->setIdclient($client->getIdclient());
$newRevision->setIsLocked(0);
$newRevision->save();
$currentRevision->setEffectiveTo($currentDate);
$currentRevision->save();

$currentRevisionHasCorporateEntities = $currentRevision->getCorporateEntitys();
$newOldCorporateEntitiesRelations = array();

foreach ($currentRevisionHasCorporateEntities as $currentRevisionHasCorporateEntity) {

$newRevisionHasCorporateEntity = $currentRevisionHasCorporateEntity->copy();
$newRevisionHasCorporateEntity->save();
}

// this continues for a while there are a whole list of insertions based on previous insertion and on and on.
}catch (Exception $exc) {
$con->rollback();
$this->getUser()->setFlashError('Error occured! Transaction Failed');
}

最佳答案

实际上,我们应该关注更小的事务边界,这样我们就可以避免在 Db 中发生任何锁定,但有时我们需要整个代码块来执行或不执行,所以在这种情况下我们几乎没有机会,您需要尽可能模块化您的代码。

关于php - 建议,php mysql transaction for insertion to multiple tables in a block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558985/

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