У меня есть таблица «Мастер заказа на продажу» (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.';
}