ฉันมีตาราง Sales Order Master (so_mstr) และตารางย่อยรายละเอียดใบสั่งขาย (sod_det) ฉันได้รับบันทึกรายละเอียดจากอาร์เรย์ $_POST[] และกำลังเตรียมบันทึกหลักภายในสคริปต์ สคริปต์ของฉันคาดว่าจะทำงานดังต่อไปนี้
- แทรกบันทึกหลัก
- แทรกบันทึกรายละเอียดโดยใช้ PHP
for loop
(แบบสอบถามสำหรับบันทึกรายละเอียดแต่ละรายการ) - อัปเดตตารางอื่นเมื่อสำเร็จขั้นตอนที่ 1 และ 2
กระบวนการทั้งหมดควรย้อนกลับในกรณีที่ขั้นตอนใดล้มเหลว
ฉันได้ลองใช้รหัสต่อไปนี้แล้ว ยังคงแทรกบันทึกรายละเอียดแม้ว่าแบบสอบถามการแทรกหลักจะล้มเหลว มีความคิดใดที่จะตรวจสอบให้แน่ใจว่าแบบสอบถามทั้งหมดทำงานสำเร็จหรือย้อนกลับทั้งหมดหากข้อใดข้อหนึ่งล้มเหลว
mysqli_autocommit($conn, FALSE);
mysqli_begin_transaction();
$insert_mstr = 'insert into so_mstr(...) values(...)';
mysqli_query($conn, $insert_mstr);
foreach ($order_details['order_details'] as $line_item) {
$insert_line = 'INSERT INTO sod_det(...) values(...)';
mysqli_query($conn, $insert_line);
}
if(mysqli_commit($conn)){
insert_ar_reco(); // inserts into another table
increment_soseq($conn, $param); // updates a table
}
else{
echo 'Error occurred! transaction rolled back.';
}