亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php mysqli事務回滾無效

php mysqli事務回滾無效

瀟瀟雨雨 2019-03-18 14:44:33
如題: // 開始事務     $mysqli->autocommit(false); // 設置為不自動提交,因為MYSQL默認立即執行          $stmt = $mysqli->prepare("update seat_table set count = count + 1 where seat_id = ? and count < 50");          $stmt->bind_param("i", $old_seat_id);         if ($stmt->execute()) {         $stmt->close();         $stmt = $mysqli->prepare("update seat_table set count = count-1 where bus_id = ? and seattime = ? and count > 0");         $stmt->bind_param("is", $bus_id, $seattime);        if ($stmt->execute()) {                          $mysqli->commit(); // 提交                          /* 判定事務終止,重新啟用負載均衡 */             $mysqli->autocommit(TRUE);             $mysqli->close();             //             if ($flag == 1) { // 執行退款業務//             }             echo json_encode(array(                "code" => "200",                "order_id" => $stmt->insert_id             ));         } else { // 減庫失敗             $mysqli->rollback();            die('1500');         }     } else { // 回庫失敗         $mysqli->rollback();        die('2500');     }首先我這個語句報了錯,報Fatal error: Call to a member function bind_param() on a non-object ,報錯地方在第一個語句(加庫存操作count=count+1),但是無解為什么報錯,語句是不會錯的,在命令行可正確執行然而就算報錯了,卻仍然被執行了(十萬個程序員問號),結果就是庫存加了1,要減的沒有變化。我蒙蔽了,大半夜的很頭痛。求助問題所在?。》浅8兄x?。。?
查看完整描述

2 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

推薦用pdo吧


查看完整回答
反對 回復 2019-03-18
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

錯是第一個prepare語句失敗了 打印下報錯信息看看

要先開啟事務 才能將接下來的操作作為一個整體提交或回滾

$o = new Mysqli(...);

$o->autocommit(false);

$o->begin_transaction();//開啟事務...if(成功)
{
    $o->commit();
}else{
    $o->rollback();
}

$o->autocommit(true);


查看完整回答
反對 回復 2019-03-18
  • 2 回答
  • 0 關注
  • 579 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號