Yii 事务批量插入数据

$transaction=Yii::app()->db->beginTransaction();
try{
  $model1->save();
  $model2->save();
  $model3->save();
  $model4->save();
  $model5->save();
  //出错
  $model6->save();
  $transaction->commit();
} catch(Exception $e){
  $transaction->rollBack();
}

model1 , model2 , model3 , model4 , model5 照样存储成功!

如果在$model6->save()可能是因为某种原因没能成功插入或更新数据,这时候会返回false,但不会有异常抛出来驱动事物回滚。你应该判断如果save时返回了false,即没有插入或更新成功,应该手动抛出Exception,这样在捕获Exception后可以rollback。

$transaction=Yii::app()->db->beginTransaction();
try{
    foreach ($models as $model) {
        if (!$model->save()) {
            throw new Exception();
        }
    }
    $transaction->commit();
} catch(Exception $e){
    $transaction->rollBack();
}

先检查你的表引擎是否是innodb类型的,www.phpernote.com 提供技术支持。

  • 有两个函数都绑定了鼠标左键事件,冲突怎样解决?
  • PHPEXCEL 导出number_format后的数字
  • 如何做这种模糊搜索
  • PHP使用cURL调用WebService的问题
  • if语句如何判断中文
  • Codeigniter 分页,如何保存每页的表单数据?
  • mac 上源码编译安装PHP7,但是php.ini有问题
  • laravel5.4中怎么使用vue路由
  • [curl] 60: SSL certificate problem
  • 用MVC框架写了一个网站项目,目前上传到服务器,网页打开是空白,新手求教
  • 服务端 如何实现 https