我正在开发一个处理多个并发用户的php / mysql应用程序。我正在考虑对当前正在查看/编辑的记录进行锁定/警告时采取的最佳方法。
要避免的情况是两个用户查看记录,一个进行更改,另一个进行同样的操作 - 可能会有一个更改覆盖前一个。
在最新版本的WordPress中,他们使用某种方法来检测这一点,但它似乎并不完全可靠 - 通常会返回误报,至少在我的经验中。
我假设必须使用某种形式的ajax来“ping”应用程序并让它知道记录仍在被查看/编辑(否则,用户可能只是关闭他们的浏览器窗口,然后应用程序将如何知道那)。
我可以看到的另一个解决方案是检查提交更新记录的最后更新时间,以查看在此期间是否已在其他地方更新过 - 然后让用户选择继续或放弃他们自己的更改。
也许我在一个解决方案上咆哮错误的树 - 人们实现这个(必须是一个相当普遍的)要求的经验是什么?
答案 0 :(得分:6)
我会这样做:将最后一次修改的时间存储在编辑表单中。将提交时间与存储在数据库中的时间进行比较。如果它们相同,则锁定表,更新数据(以及修改时间)并解锁表。如果时间不同,请通知用户,并要求下一步。
答案 1 :(得分:3)
答案 2 :(得分:1)
时间戳比较好主意。实施成本低廉,在生产中运行成本低廉。您只需编写逻辑以向用户发送状态消息,表明他们的写入/更新未发生,因为有人将其击败。
也许考虑在名为“LastUpdateBy”之类的字段中将每个更新的用户名存储起来,并将其返回给更新预占的用户。对用户来说只是一点点精确。在公司意义上很好,也许不是在可能不合适的环境中。