【问题标题】:Maintaining history table for PHP Application维护 PHP 应用程序的历史记录表
【发布时间】:2015-08-06 16:08:08
【问题描述】:

我想为我的应用程序维护历史记录表,以跟踪用户更改了哪些字段。

以下是我的bugs_history表结构——

id, bugsid, userid, field_changed, old_value, new_value, created_on, created_by

所以我的查询是,当我更新我的表单并提交时,如何获取随着 old valuenew 一起更改的 field name。并在上述历史表中添加修改后的变化。

我为此搜索了很多,但没有按照我的要求得到。请告诉我如何实现这一目标。

【问题讨论】:

  • stackoverflow.com/questions/3816839/… ..你看的东西叫审计
  • @Amar 您能否提出任何其他解决方案或链接..
  • 你想怎么做?你想通过 PHP 还是通过 MySQL 来处理这个?
  • 我想用php
  • 当您更新表单时,您可能会从数据库中获取它。将所有这些信息存储到某个变量中,然后在将新值插入数据库之前将其与以前的值进行比较,并相应地插入bug_history 。无论您是自己做还是使用某些库,Auidting 总是会出现性能问题。所以不要认为我的建议是低效的

标签: php mysql codeigniter history


【解决方案1】:

如果您知道字段名称(您有一个包含它们的 HTML 表单,因此您可能知道名称)然后构建它们的列表,然后循环遍历,构建一个新的 SELECT 查询以获取 old_value 和然后是 INSERT 查询来保存它。选择将在created_on DESCLIMIT 1 上排序。

但我在这里看到了一个明显的问题:并发性。当两个用户尝试同时编辑同一个错误(使用相同的bugsid)时会发生什么?他们会期望old_value 对两者都一样吗?还是应该按顺序执行这两个操作?还是应该警告最后一个要编辑的人他正在尝试编辑陈旧的数据?哪一个会得到“最新的”created_on? 这就是你真正的问题,而不是编写生成两个 SQL 查询的代码。

【讨论】:

  • 是的,我同意你的观点......但如果你以这种方式思考,那么许多 Web 应用程序都无法处理这个问题。除了并发问题,您能否为我的问题提出一些解决方案或链接,我将非常感谢您。
  • 但如果你不这样做,最终你会遇到麻烦。显然,大多数 Web 应用程序都很糟糕。大多数程序员都很糟糕:)
  • 是的,你的权利......那么根据你的最佳解决方案是什么。如果我想继续使用现有代码,你会建议我使用哪种解决方案。
  • 你真的需要old_value吗?我不这么认为。消除它可以解决审计并发问题。关于两个人编辑同一事物的并发问题有多种解决方案。当有人开始编辑时将项目置于“编辑”模式并禁止其他任何人编辑,直到他“解锁”它,或者在保存时检查该值是否尚未更改。如果它确实通知并询问如何继续 - 覆盖或丢弃。您可能需要交易才能使其工作。
猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2014-01-21
相关资源
最近更新 更多