Yii 异常处理、事务回滚
2016-09-24 08:54
302 查看
一:DAO 使用事务
当一个应用要执行几条查询,每条查询要从数据库中读取并/或向数据库中写入信息时, 保证数据库没有留下几条查询而只执行了另外几条查询是非常重要的。 事务,在 Yii 中表现为 CDbTransaction 实例,可能会在下面的情况中启动:
开始事务.
一个个执行查询。任何对数据库的更新对外界不可见。
提交事务。如果事务成功,更新变为可见。
如果查询中的一个失败,整个事务回滚。
上述工作流可以通过如下代码实现:
$transaction=$connection->beginTransaction(); //开始事务
try {
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();//提交事务
} catch(Exception $e) // 如果有一条查询失败,则会抛出异常 {
$transaction->rollBack();//事务回滚
// $apply_arr['errorCode'] = '106'; //数据添加/更新失败
// $apply_arr['data']['reason'] = $e->getMessage();
// 或 echo $e->getMessage();
}
二. 使用 AR 处理事务
每个 AR 实例都含有一个属性名叫 dbConnection ,是一个 CDbConnection 的实例,这样我们可以在需要时配合 AR 使用由 Yii DAO 提供的 事务 功能:
注意:
1:上面开始事务中:红色部分其实都是CDbconnection的实例,
即可以用这种写法:$transaction = Yii::app()->db->beginTransaction();
当一个应用要执行几条查询,每条查询要从数据库中读取并/或向数据库中写入信息时, 保证数据库没有留下几条查询而只执行了另外几条查询是非常重要的。 事务,在 Yii 中表现为 CDbTransaction 实例,可能会在下面的情况中启动:
开始事务.
一个个执行查询。任何对数据库的更新对外界不可见。
提交事务。如果事务成功,更新变为可见。
如果查询中的一个失败,整个事务回滚。
上述工作流可以通过如下代码实现:
$transaction=$connection->beginTransaction(); //开始事务
try {
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();//提交事务
} catch(Exception $e) // 如果有一条查询失败,则会抛出异常 {
$transaction->rollBack();//事务回滚
// $apply_arr['errorCode'] = '106'; //数据添加/更新失败
// $apply_arr['data']['reason'] = $e->getMessage();
// 或 echo $e->getMessage();
}
二. 使用 AR 处理事务
每个 AR 实例都含有一个属性名叫 dbConnection ,是一个 CDbConnection 的实例,这样我们可以在需要时配合 AR 使用由 Yii DAO 提供的 事务 功能:
$model=Post::model(); $transaction=$model->dbConnection->beginTransaction(); try { // 查找和保存是可能由另一个请求干预的两个步骤 // 这样我们使用一个事务以确保其一致性和完整性 $post=$model->findByPk(10); $post->title='new post title'; $post->save(); $transaction->commit(); } catch(Exception $e) { $transaction->rollBack(); }
注意:
1:上面开始事务中:红色部分其实都是CDbconnection的实例,
即可以用这种写法:$transaction = Yii::app()->db->beginTransaction();
相关文章推荐
- Spring事务处理异常回滚问题
- EJB3.0 中事务的处理自定义异常类并回滚
- Nhibernate中的连接超时时事务回滚引发异常的处理方法
- Struts2 OSIV模式下的异常处理及事务回滚解决方案
- spring 回滚事务 异常处理 手动回滚 公司通用处理方式
- Spring事务异常回滚失败原因,在事务处理层捕获异常不抛出就不会回滚
- MS SQL Server 事务回滚处理!
- Spring中发生异常的事务回滚问题
- Asp.Net事务和异常处理:
- ASP.NET中的事务处理和异常处理
- "新事务不能登记到指定的事务处理器中"异常的处理----MSDTC的正确配置
- 高级 DAO 编程(事务界定、异常处理和日志记录)
- ASP.NET中的事务处理和异常处理
- ASP.NET中的事务处理和异常处理
- 转 业务层中 被调用服务的遭遇事务回滚的处理 2方法
- 关于spring声明式事务管理异常处理的测试和小结
- "新事务不能登记到指定的事务处理器中"异常的处理----MSDTC的正确配置
- ASP.NET事务处理和异常处理
- 关于spring声明式事务管理异常处理的测试和小结
- .net 事务问题,执行多条更新语句,如果有一条出异常,全部回滚