素材牛VIP會員
為什么MySQL事務在PHP循環里不回滾?
 lh***81  分類:SQL代碼  人氣:830  回帖:3  發布于1年前 收藏此帖(0)

引擎是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;
        }
        
        
        
  
 標簽:mysqlphp

討論這個帖子(3)垃圾回帖將一律封號處理……

Lv6 碼匠
ti***nx 學生 1年前#1

需要先開啟事物。

Lv3 碼奴
鳳***奇 職業無 1年前#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();
} 
Lv3 碼奴
Jo***91 CEO 1年前#3

數據庫存儲引擎使用的不對 要使用innodb

 文明上網,理性發言!   ?? 阿里云幸運券,戳我領取
经典黑杰克注册 什么财务工作最赚钱 电脑小说赚钱的软件 广西修正药代理好赚钱吗 自己繁育狗狗 赚钱吗 开网货如何赚钱 土建哪块最赚钱 vv音乐音符赚钱 部落冲突新手最快赚钱吗 淘宝刷单赚钱是真的么 赚钱舍不得花钱 赚钱快无押金的方法 天津哪个夜场哪赚钱多 建筑商如何赚钱 靠微信赚钱方法 香港代购珠宝怎么赚钱 蔡依林赚钱最多的一年