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