MySQL和PHP中是否有办法只允许执行更新的人查看有关特定记录的信息?
例如,如果一个用户加载页面,则会向他们显示必须更新的记录,直到该用户完成更新此记录,访问此页面的任何其他用户都无法查看此特定记录。
答案 0 :(得分:0)
向表中添加“已锁定”列,并在用户调用编辑表单后,将“已锁定”的db值设置为user_id,并在save之后将其设置为false / null。 在您的视图操作中,检查锁定值
答案 1 :(得分:0)
当有人请求编辑页面时,您必须手动锁定行(通过添加IsLocked
列),因为一旦PHP脚本执行结束,与数据库的连接就会丢失(尽管pooling等,脚本执行被停止,因此您无法再次从同一个线程解锁,因为该连接可能会转到另一个脚本。)
不要忘记创建一种解锁脚本,例如由cron启动,以解锁已锁定超过一定时间的行。
答案 2 :(得分:0)
我不建议将任何列添加到相关数据表中。我宁愿创建特殊的locks
表来保存信息:
create table locks (
tablename varchar,
primarykey int,
userid int,
locktime datetime);
然后考虑以下原则:
SELECT ... FOR UPDATE
这样的解决方案不起作用的原因,这就是为什么你需要保留一个人的用户ID - 实际上是第一次请求并执行锁定的人locks
表的每次访问必须锁定整个表(使用MySQL的LOCK
语句)以避免锁定同一行时的并发性locktime
超时必须很短,或者你应该提供一些 ping (即AJAX)机制,只要用户正在处理锁定记录locktime
locktime
未过期tablename
和primarykey
当然是样本,您应根据自己的需要进行调整: - )答案 3 :(得分:-1)
您可以在设置状态的位置添加名为locked
的字段。也许您还添加了一个像lockedtime
这样的字段,您可以在其中保存锁定活动时间的时间戳。这取决于你的需求。
也有可能做到这一点。像
SELECT * FROM table WHERE primarykey = x FOR UPDATE;