Yii事務

$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=1011的時候,$test->save() 會返回false,這僅僅是插入數據庫沒有成功,並不會拋出一個異常 只有產生異常的時候,纔會被catch到,走catch裏的代碼。

    for循環完成後,因爲沒有產生異常,所以會走$tr->commit(); 這行代碼。

    如果你想讓插入失敗也拋出異常的話,可以自己手動添加,這樣失敗的時候就會走catch裏面的代碼了。

    if($test->save()) {
      //插入成功
    } else {
      //插入失敗
      throw new Exception('insert error'); 
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章