我正在尝试在 yii2 基本框架中实现事务。我编写了一个小测试脚本来测试事务。除了一个异常(exception),一切都很顺利。当我运行事务脚本并立即停止它时,数据库中没有发生任何更改。但是,当我运行脚本直到脚本完成时,数据库中已完成更改,但更改未按所需方式进行。例如,如果我的初始金额为 1000.00 并运行金额变量 amount+100 的脚本,如果我立即停止它,数据库中不会发生任何变化,但当我运行脚本直到脚本完成时,之后金额值为 1000 +100+100 = 1200,而不是 1100。这是我的代码。
public function actionIndex()
{
$connection = \Yii::$app->db;
$transaction = $connection->beginTransaction();
try
{
$command = $connection->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1');
$command->execute();
$command = $connection->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1');
$command->execute();
$command = $connection->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1');
$command->execute();
$command = $connection->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1');
$command->execute();
sleep(10);
$transaction->commit();
}
catch(Exception $e)
{
$transaction->rollback();
}
我认为问题在于我的回滚未执行。任何帮助将不胜感激。
最佳答案
我认为问题与交易无关。尝试在有/没有交易的情况下执行代码并比较结果。 此外,我建议使用更简单的语法:
\Yii::$app->db->transaction(function(){
\Yii::$app->db
->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1')
->execute();
\Yii::$app->db
->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1')
->execute();
\Yii::$app->db
->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1')
->execute();
\Yii::$app->db
->createCommand('UPDATE test_transaction1 SET amount=amount+1 WHERE sno=1')
->execute();
sleep(10);
});
关于php - Yii2 事务 - 更新先前未提交的值加上新的提交值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168193/