Yii事务什么情况使用? [ 1.0 版本 ]
$tr = Yii::app()->db->beginTransaction();
try {
for($i=1;$i<=11;$i++){
$test = new Test();
$test->name = 'ab'.$i;
if($test->save()){
}
}
$tr->commit();
} catch (Exception $e) {
$tr->rollBack();
}
上述代码就是插入11条数据,name字段是varchar长度最大为3,我想使用事务来,当$i=10或11的时候,name的值超过3了,那前面插入的几条数据就不会再表中存在。所以我用了事务,但是,结果还是前面9条还在表中,没有回滚,所以想问下,事务是不是涉及多表才能用?
共 3 个回答
-
1 首先运用事物必须是
innodb
引擎。其他无效,所以你先检查下数据库使用的引擎。2 当
$i=10
或11
的时候,$test->save()
会返回false
,这仅仅是插入数据库没有成功,并不会抛出一个异常 只有产生异常的时候,才会被catch
到,走catch
里的代码。当
for
循环完成后,因为没有产生异常,所以会走$tr->commit();
这行代码。如果你想让插入失败也抛出异常的话,可以自己手动添加,这样失败的时候就会走
catch
里面的代码了。if($test->save()) { //插入成功 } else { //插入失败 throw new Exception('insert error'); }
xyf90314
注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
最后登录:2023-03-13
在线时长:95小时23分
- 粉丝21
- 金钱5257
- 威望40
- 积分6607