3

我正在开发一个处理多个同时用户的 php / mysql 应用程序。我正在考虑对当前正在查看/编辑的记录进行锁定/警告时采取的最佳方法。

要避免的情况是两个用户查看记录,一个进行更改,然后另一个执行相同的操作 - 一个更改可能会覆盖以前的更改。

在最新版本的 WordPress 中,他们使用某种方法来检测这一点,但它似乎并不完全可靠——通常会返回误报,至少在我的经验中是这样。

我假设必须使用某种形式的 ajax 来“ping”应用程序并让它知道记录仍在被查看/编辑(否则,用户可能会简单地关闭他们的浏览器窗口,然后应用程序将如何知道这一点)。

我可以看到的另一个解决方案是检查提交记录以供更新时的最后更新时间,以查看在此期间它是否已在其他地方更新 - 然后为用户提供继续或放弃他们自己的更改的选择。

也许我在解决方案方面提出了错误的建议-人们实现此(必须是相当普遍的)要求的经验是什么?

4

3 回答 3

7

我会这样做:将上次修改的时间存储在编辑表单中。将此提交时间与存储在数据库中的时间进行比较。如果它们相同,则锁定表,更新数据(连同修改时间)并解锁表。如果时间不同,请通知用户并询问下一步。

于 2009-03-20T21:32:50.417 回答
3

请参阅:我可以做些什么来防止 wiki 风格的网站上的写-写冲突?

于 2009-03-20T21:30:14.697 回答
1

时间戳比较的好主意。它的实施成本很低,而且在生产中运行也是一种成本低廉的操作。您只需要编写逻辑将状态消息发送回用户,即他们的写入/更新没有发生,因为有人打败了他们。

也许考虑将每次更新的用户名存储在一个名为“LastUpdateBy”之类的字段中,然后将其返回给抢占更新的用户。对用户来说只是一点点好处。在企业意义上很好,也许不是在一个可能不合适的环境中。

于 2009-03-20T21:29:22.220 回答