【发布时间】:2018-09-10 10:15:01
【问题描述】:
我有一个销售订单主 (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.';
}
【问题讨论】: