我正在创建一个PHP Web应用程序,这将涉及到:
1)用户打开记录
2)用户对记录进行更改
3)保存对记录的更改
因为这是一个多用户应用程序,所以我希望防止两个用户同时打开相同的记录,并且一个用户的更改覆盖下一个记录的情况,最好是在打开记录时强制执行某种锁定方法,当用户离开页面时,该方法会自动解锁。
发布于 2012-03-08 23:47:38
所谓记录,是指SQL记录吗?如果是这样,您可以添加另一个列isOpen。只要其他人打开了它,就将其设置为1,在这种情况下,不要将其提供给其他任何人。
在这样的情况下,最好也实现超时机制,在这种情况下,记录只能在'x‘分钟内打开,然后被强制关闭。
(编辑:此答案假设您希望在用户查看从表中获取的信息的整个持续时间内锁定一条记录。如果您只想在记录发生读/写操作的瞬间锁定该记录,MySQL引擎具有内置的机制。)
回复您的评论的
为了在活动用户离开时让其他人可以访问记录,我可以想到两种方法:
发布于 2012-03-08 23:54:57
我使用字段update_date。当用户读取记录时,我会用这个日期写一个cookie。当用户更新记录并提交新数据时,我添加了WHERE update_date = '$my_escaped_date' AND id = '$the_edited_id',如果mysql_affected_rows为零,我会显示错误消息,表明编辑的数据是旧的。这并不完美,因为如果您编辑旧数据,您必须重新输入它,但它可以完成这项工作。
发布于 2012-03-08 23:53:47
锁定方法正是mysql中提供的方法:
http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html
它不是自动的,但它允许你锁定一个表,做一些事情,然后再次解锁。
但是要小心,如果你忘记解锁一个表,或者用户花了很长时间来更改某些东西,并且你只在该用户提交表单时才解锁,系统不会被锁定。
一种更好的方法可能是从表中读取数据,并在提交表单时检查数据是否未被更改。如果有,您可以通知用户更改,否则您可以锁定该表,执行更改,然后再次解锁。
https://stackoverflow.com/questions/9620457
复制相似问题