我有一个脚本在我的InnoDB上进行多次UPDATE,但如果一次UPDATE失败,我希望所有其他UPDATE都回滚。所以我在网上搜索,我能找到的最好的是PDO :: beginTransaction。除了我希望我的DB实际更新每个UPDATE,如果其中一个失败,我需要删除每个以前的UPDATE。我需要这个,因为这个脚本可以从多个用户运行,之前更新的行不应该再次更新。
例如:
这是我的表“reserver”:
id | idChambre | idReservation
---+-----------+--------------
0 | 1 | 1
第一行表示房间1与订单1匹配,因此无法再次匹配。因此,如果没有任何错误发生,此行将保持不变,但如果用户取消或超时事件发生,我希望删除此行。
所以现在我看到了两种方式:pdo Transaction(但我不知道怎么做)和我的实际方法:存储我的“reserver”表的每个id并在发生错误时将它们全部删除。
还有更好的方法吗?我做错了吗?
英语不是我的母语所以请你好。
答案 0 :(得分:0)
抱歉在这里写这篇文章因为我没有多少声誉可以评论..
1)您应该使用所有更新查询都在其中的过程 2)调用begin transaction方法后调用该过程 在上面的场景中,如果任何查询无法更新行,那么您的整个过程将被回滚 3)您也可以直接在程序中使用mysql事务 在程序级别使用以下链接查询mysql事务 How can I use transactions in my MySQL stored procedure?
答案 1 :(得分:0)
您可以使用事务管理来实现此目的。 检查以下代码:
try {
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
$conn->exec("first update query");
$conn->exec("second update query");
$conn->commit();
} catch (Exception $e) {
$conn->rollBack();
echo "Failed: " . $e->getMessage();
}
如果发生错误,将回滚beginTransaction之后执行的所有更新查询。