【问题标题】:How do I ensure all exceptions in this DB transaction are caught?如何确保捕获此数据库事务中的所有异常?
【发布时间】:2016-06-22 06:05:41
【问题描述】:

我使用 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() 检查.. 有没有更简单的方法来完成这项工作?

【问题讨论】:

  • Yii 文档页面上的一个示例建议在 try/catch 之外初始化 $transaction。但是现在找不到链接。
  • @kouton 如果在初始化时出现错误,那么它将使脚本崩溃..
  • 为什么选择语句需要事务?

标签: php yii transactions


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多