在我的第一个php/codeigniter项目中,我搜索了‘net以获取有关锁定编辑数据访问的信息,但没有找到太多信息。
我希望两个用户同时尝试编辑同一个表单是相当常见的。
我的经验(在bbx、filepro和其他rad应用程序的状态世界中)是,正在编辑的数据是使用悲观锁锁定的一个用户当时可以访问编辑表单。第二个用户基本上必须等待第一个用户完成。我知道可以使用ajax发送xmlhttprequest来维护一个“锁”数据库。
缺少状态的php世界似乎更喜欢乐观锁定。如果我理解正确的话,它的工作原理是这样的:两个用户都可以访问数据,并且他们各自记录数据的“更改前”版本。在保存更改之前,将再次检索数据并比较“更改前”版本。如果两个版本相同,则会写入用户更改。如果它们不同,则向用户显示自他/她开始编辑后所做的更改,并添加一些机制来解决这些差异,或者向用户显示“抱歉,请重试”消息。
我对这里的人在实现悲观和乐观锁方面的任何经验都感兴趣。如果有可用的库、工具或“操作指南”,请提供链接。
谢谢
最佳答案
据我所知,codeigniter不支持锁定行。
如果要实现乐观锁定,则应添加版本列或时间戳列,这是每次更新/插入时必须更改的。将version列放入表单中的隐藏字段中。然后在每次更新之前,添加一个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 */
}
关于php - 乐观锁和悲观锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2876323/