如何确保捕获此数据库事务中的所有异常?

时间:2016-06-22 06:05:41

标签: php yii transactions

我使用Yii并且最近开始使用带有try / catch块的事务。

以下是代码现在的样子:

    $dbConnection = Yii::app()->db();
    try {
        $transaction = $dbConnection->beginTransaction();
        $dbConnection->createCommand("SELECT * from table_1")
                ->queryAll();

        $transaction->commit();

    } catch (Exception $ex) {
        $transaction->rollback();
    }

假设数据库存在异常(它在单元测试时出现),我无法回滚,因为PHP因致命$transaction undefined错误而死亡。

我宁愿不在任何地方包含isset()检查.. 有没有更简单的方法来使这项工作?

1 个答案:

答案 0 :(得分:1)

您可以检查异常是否是CDbException的实例

$dbConnection = Yii::app()->db();
try {
    $transaction = $dbConnection->beginTransaction();
    $dbConnection->createCommand("SELECT * from table_1")
            ->queryAll();

    $transaction->commit();

} catch (Exception $ex) {
    if ($ex instanceof CDbException)
    {
      // handle CDBException
      // ...
    }

    $transaction->rollback();
}