$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();
}
-
事物需要用INNODB引擎的,看你的是不是
-
1 首先運用事物必須是
innodb
引擎。其他無效,所以你先檢查下數據庫使用的引擎。2 當
$i=10
或11
的時候,$test->save()
會返回false
,這僅僅是插入數據庫沒有成功,並不會拋出一個異常 只有產生異常的時候,纔會被catch
到,走catch
裏的代碼。當
for
循環完成後,因爲沒有產生異常,所以會走$tr->commit();
這行代碼。如果你想讓插入失敗也拋出異常的話,可以自己手動添加,這樣失敗的時候就會走
catch
裏面的代碼了。if($test->save()) { //插入成功 } else { //插入失敗 throw new Exception('insert error'); }