我有一个脚本在我的InnoDB上执行多个更新,但是如果一个更新失败了,我希望所有其他更新都回滚。所以我在网上搜索,我能找到的最好的是PDO::入门交易。除了我希望我的数据库对每一个更新都进行实际更新,如果其中一个失败了,我需要删除以前的每个更新。我需要这样做,因为这个脚本可以从多个用户运行,之前更新过的行不应该再次更新。
例:
这是我的“预备役者”桌:
id | idChambre | idReservation
---+-----------+--------------
0 | 1 | 1第一行意味着房间1与订单1相匹配,因此不能再匹配。因此,如果没有任何错误发生,该行将保持不变,但如果用户取消或超时事件发生,我希望删除该行。
所以现在我看到了2种方式: pdo事务(但我不知道如何)和我的实际方法:存储我的“订户”表中的每个id,并在发生错误时全部删除它们。
还有更好的办法吗?我做错了吗?
英语不是我的母语所以请友好一点。
发布于 2015-04-16 13:31:05
很抱歉把它写在这里,因为我没什么好评论的。
1)您应该使用所有更新查询都在其中的过程,2)在上述场景中调用begin事务方法后调用该过程,如果任何查询未能更新行,则整个过程将回滚3)您也可以在过程中直接使用mysql事务,请参阅下面链接中的mysql事务,以便在过程级How can I use transactions in my MySQL stored procedure?中使用
发布于 2015-04-16 13:39:01
您可以使用事务管理来实现这一点。检查以下代码:
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之后执行的所有更新查询都将回滚。
https://stackoverflow.com/questions/29675891
复制相似问题