如題: // 開(kāi)始事務(wù)
$mysqli->autocommit(false); // 設(shè)置為不自動(dòng)提交,因?yàn)镸YSQL默認(rèn)立即執(zhí)行
$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(); // 提交
/* 判定事務(wù)終止,重新啟用負(fù)載均衡 */
$mysqli->autocommit(TRUE);
$mysqli->close();
// if ($flag == 1) { // 執(zhí)行退款業(yè)務(wù)// }
echo json_encode(array( "code" => "200", "order_id" => $stmt->insert_id
));
} else { // 減庫(kù)失敗
$mysqli->rollback(); die('1500');
}
} else { // 回庫(kù)失敗
$mysqli->rollback(); die('2500');
}首先我這個(gè)語(yǔ)句報(bào)了錯(cuò),報(bào)Fatal error: Call to a member function bind_param() on a non-object ,報(bào)錯(cuò)地方在第一個(gè)語(yǔ)句(加庫(kù)存操作count=count+1),但是無(wú)解為什么報(bào)錯(cuò),語(yǔ)句是不會(huì)錯(cuò)的,在命令行可正確執(zhí)行然而就算報(bào)錯(cuò)了,卻仍然被執(zhí)行了(十萬(wàn)個(gè)程序員問(wèn)號(hào)),結(jié)果就是庫(kù)存加了1,要減的沒(méi)有變化。我蒙蔽了,大半夜的很頭痛。求助問(wèn)題所在?。》浅8兄x?。?!
2 回答

阿波羅的戰(zhàn)車
TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
錯(cuò)是第一個(gè)prepare語(yǔ)句失敗了 打印下報(bào)錯(cuò)信息看看
要先開(kāi)啟事務(wù) 才能將接下來(lái)的操作作為一個(gè)整體提交或回滾 $o = new Mysqli(...); $o->autocommit(false); $o->begin_transaction();//開(kāi)啟事務(wù)...if(成功) { $o->commit(); }else{ $o->rollback(); } $o->autocommit(true);
添加回答
舉報(bào)
0/150
提交
取消