数据库和try / catch

时间:2017-03-22 15:51:42

标签: php yii yii2 try-catch

我用PHP编写,使用Yii2框架,我想做一些try / catch情况,如下所示:

try {
   save-something
   delete-something
} catch (Exception $e) {
   put an error msg
}

如果PHP / Yii2可以保存第一个元素,但是不能删除第二个元素,会发生什么?这些行动将会逆转?或者我保存了一个元素,而另一个元素没有被删除?如果答案是案例(2),那么达到我需要的最佳方法是什么?交易?

2 个答案:

答案 0 :(得分:2)

如果第2行引发异常,try-catch将无法回滚第1行中所做的更改。实现这一目标的一种方法是使用交易:

transaction = db.starttransaction()
try {
   transaction = db.starttransaction()
   transaction->save-something
   transaction->delete-something
   transaction->commit()
} catch (Exception $e) {
   transation->reverse()
}

答案 1 :(得分:1)

有两种方法可以在发生故障时保存和删除它,或者在这里使用事务更正确是yii2上的真实示例

 $transaction = User::getDb()->beginTransaction();
 try {
        $user = new User();
        $user->email = 'test@gmail.com';
        $user->save();

        $transaction->commit();
    } catch (\Exception $e) {
        $transaction->rollBack();
    }

Class yii\db\Transaction