php – 乐观和悲观的锁

在我的第一个php / Codeigniter项目上工作,我已经搜索了网络,以获取有关锁定访问编辑数据的信息,但没有找到太多信息.

我希望2个用户尝试同时编辑同一个表单时会经常发生这种情况.

我的经验(在BBx,filePro和其他RAD应用程序的有状态世界中)是使用悲观锁定来锁定正在编辑的数据 – 一个用户当时可以访问编辑表单.第二个用户基本上必须等待第一个完成.我知道这可以使用Ajax发送XMLHttpRequests来维护一个’lock’数据库.

缺乏状态的php世界似乎更喜欢乐观锁定.如果我理解正确,它的工作原理如下:两个用户都可以访问数据,并且每个用户都记录一个“更改前”版本的数据.在保存更改之前,将再次检索数据并比较“更改前”版本.如果两个版本相同,则写入用户更改.如果他们不同;向用户显示自他/她开始编辑以来已经改变的内容并且添加了一些机制来解决差异 – 或者用户被显示为“抱歉,再试一次”消息.

我对这里的人们在实现悲观和乐观锁定方面的经验感兴趣.如果有任何库,工具或“如何使用”我很感激链接.

谢谢

最佳答案 据我所知,CodeIgniter不支持锁定行.

如果要实现乐观锁定,则应添加必须在每次更新/插入时更改的版本列或时间戳列.将版本列放入表单中的隐藏字段.然后在每次更新之前添加一个where子句,如:

$this->db->where('version',$editedVersion);

要么

$this->db->where('timestamp',$editedTimestamp);

然后你应该检查更新是否正确更新了1行..

$this->db->where('id',$editedId);
$this->db->update('tablename',$data);
$rowsAffected = $this->db->affected_rows();
if ($rowsAffected == 0) {
    /* Data changed by other user, update failed */
} else {
   /* updated successfully */
}
点赞