排行榜

Yii的处理事务

本文阅读 2 分钟
首页 后端开发 正文
广告

当在一个应用执行一些查询时, 每次读取 或 写入数据库中的信息, 确保数据库不是只执行了一部分查询, 这一点非常重要.

一个事务处理, 在 Yii 的代表是一个CDbTransaction 实例, may be initiated in this case:

开始事务处理.

逐个执行查询. 任何对数据库的更新对于外部都是不可见的.

提交(Commit)事务. 若事务成功执行, 对数据库的更改变得可见.

若其中一个查询失败, 整个事务被回滚(rolle back).

上面的流程可以使用下面的代码来执行:

$transaction = $connection->beginTransaction ( ) ;
try
{
$connection->createCommand( $sql1 ) ->execute ( ) ;
$connection->createCommand( $sql2 ) ->execute ( ) ;
//.... other SQL executions
$transaction ->commit( ) ;
}
catch ( Exception $e) // an exception is raised if a query fails
{
$transaction ->rollBack( ) ;
}

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();
}


本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.unfit.cn/archives/72.html
Yii 过滤器(beforeAction)
« 上一篇 07-19
Mysql中字段汉语转换成拼音,并取其首字母语句
下一篇 » 07-19
广告

相关推荐