为了账号安全,请及时绑定邮箱和手机立即绑定

为什么MySQL事务在PHP循环里不回滚?

为什么MySQL事务在PHP循环里不回滚?

PHP
喵喵时光机 2019-03-15 01:37:11
引擎是innodb。代码如下 try{ // …… ……一些代码 $this->model->begin(); if(!empty($goods_info) && !empty($shelf_num)){ $order_arr['total_money'] = 0; $order_arr['good_num'] = 0; //根据传递商品编号及编号下的数量信息,循环插入订单详情表 foreach ($goods_info as $val) { $good_data = $this->model->findByid($val[0],array('price'));//查找商品价格信息 if(!empty($good_data) && $good_data[0]['price'] == $val[2]){ $order_arr['total_money'] += $val[2]*$val[1];//订单总金额 $order_arr['good_num'] += $val[1];//订单商品总数 $order_detail['barcode'] = $val[0];//商品编号 $order_detail['good_num'] = $val[1];//商品数量 $order_detail['price'] = $val[2];//商品价格 $this->model->create(); $this->model->save($order_detail);//保存到订单详情表 }else{ throw new Exception('001'); } } // …… …… 一些代码 $this->model->commit(); $this->model->end(); }catch(Exception $e) { $this->model->rollback(); $arrData = $e->getMessage(); echo $arrData; }
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

$good_data = $this->model->findByid($val[0],array('price'));//查找商品价格信息
if(!empty($good_data) && $good_data[0]['price'] == $val[2]){
    $this->model->create();
    $this->model->save($order_detail);//保存到订单详情表
    $this->model->commit();
}else{
    $res = $this->model->rollback();
    $this->model->end();
}

if判断的是商品信息,else里走回滚,那你回滚了啥呢,这逻辑不对。
试着用try catch:

$this->model->begin();
try{
    /* ...... */
    $this->model->save($order_detail);
    $this->model->commit();
}catch(Exception $e){
    $this->model->rollback();
} 
查看完整回答
反对 回复 2019-03-18
?
慕斯709654

TA贡献1840条经验 获得超5个赞

数据库存储引擎使用的不对 要使用innodb

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 502 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信