如何防止php/mysql中的一条记录中出现多次更新


How to prevent multiple updates in a record in php/mysql

我有一个网页,用户可以在其中创建/打开项目并查看/更新其信息。信息存储在MySQL数据库中。用户可以与合作伙伴共享他们自己的项目,这样他们的合作伙伴也可以编辑他们的项目。在这种情况下,如果两个或多个用户同时打开某个特定项目,他们可以覆盖彼此的更新。因此,我需要开发一个可靠的代码来防止这种并发更新,并向用户提供适当的消息。有没有解决这种情况的模式或最佳实践?感谢

一种简单的方法是在每个记录上放一个序列号,当记录更改时,序列号会增加。当页面加载时,您会将序列号作为隐藏的<input/>,并将其与更新查询一起发送:

UPDATE table
SET field1 = '?', field2 = '?', sequence = sequence + 1
WHERE id = ? AND sequence = ?;

运行查询后,您可以看到修改了多少行(您的数据库API应该提供一种方法来检索查询后"受影响的行"的数量)。如果为零,则说明找不到记录ID,或者记录被另一个用户修改(sequence = ?子句不匹配)。