当另一个用户已经在页面上时,我需要锁定一个用户。
应该仍然可以查看帖子并添加内容,但mysql中的函数to UPDATE不应该被允许,因为它可能会覆盖数据。
有人知道怎么做吗?我一直在拼命想办法找到答案。
系统使用php和mysql。当另一个用户在同一页面上时,用户已经收到消息。我只需要找到一种方法来"禁用"mysql UPDATE。。。
提前谢谢!
Youri
设置一个会话变量并跟踪它。假设变量的名称为"engaged"
如果(engaged=1){readonly}else{read_and_write;set engaged=1}
不要试图处理这是数据库。如果你开始获取和持有锁,尤其是使用网络客户端,你就进入了一个痛苦的世界!
我就是这样处理的:
首先,创建一个表,让我们称之为RecordLock
(Table_name
,Record_id
,timeout
)让timeout是一个unix时间戳(以避免所有与日期时间有关的麻烦)让"table_name"answers"Record_Id"是一个复合主键。
每当用户加载页面时,请执行以下操作:
DELETE FROM RecordLock WHERE timeout < CURRENT_TIMESTAMP
这是为了清除所有过期的锁- 将记录插入记录锁定(table_name、record_id、timestamp+timeout),其中timeout是锁定有效的秒数。这是为了确保如果有人离开浏览器或断开互联网连接,记录不会永远被锁定。您也可以
SELECT
查看锁是否存在,但请注意,根据处理事务的方式,可以在SELECT
和INSERT
之间插入记录
如果插入失败,则说明有人已经获得了锁定(由于表和记录id上的PK)。您的应用程序应该知道该记录是只读的,不允许保存,并提醒用户该记录正在编辑中。
如果插入成功,则表示您已锁定。3.当当前用户关闭或保存记录时,删除RecordLock中的记录(否则它将过期,并可能阻止其他用户超过需要的时间)