我正在使用 Zend 框架开发基于 Web 的应用程序。
我正在寻找一种方法来保留对一堆列所做的更新历史记录。
用例:用户可以添加具有 5 个属性的项目。允许用户更新 5 个属性。我需要跟踪他对这 5 个属性所做的所有更新。
我想到的方法是添加一个名为 log 的新表,其中存储旧值、新值、列名、itemID 和时间戳。
做这个的最好方式是什么?是否有任何现有的方法/选项/示例?
谢谢,
我正在使用 Zend 框架开发基于 Web 的应用程序。
我正在寻找一种方法来保留对一堆列所做的更新历史记录。
用例:用户可以添加具有 5 个属性的项目。允许用户更新 5 个属性。我需要跟踪他对这 5 个属性所做的所有更新。
我想到的方法是添加一个名为 log 的新表,其中存储旧值、新值、列名、itemID 和时间戳。
做这个的最好方式是什么?是否有任何现有的方法/选项/示例?
谢谢,
您可能正在寻找的是审核日志。您可以在 MySQL 数据库上使用 Triggers 创建一个。
如何做到这一点的一个例子是在这里:http ://ronaldbradford.com/blog/auditing-your-mysql-data-2008-07-15/
在您下面的评论中,您补充说数据库不是“固定的”。在这种情况下,您必须将任何更改复制到表中,以便将它们应用到审计表中,以便将任何新添加的列也添加到日志中。
您可以考虑将其记录在您的应用程序中(因为您为此问题选择的标签似乎是建议的) - 但请记住,这意味着可能存在您的日志未提供完整答案的情况。数据库中的触发器、存储过程和任何手动干预都不会被记录……所以如果你选择走这条路,请小心。
触发器是进行审计的最常用方法,也是唯一真正可靠的方法来捕获无论是从用户界面还是其他地方完成的操作。它们的编写方式确实因数据库而异。如果您知道您将支持的可能的数据库后端类型,您可以为每个后端编写单独的触发器。
如果您必须在没有触发器的情况下处理此问题,那么最好的办法是拥有一个写入审计表并进行更新更改的进程。保证 Zend 框架调用存储过程而不是依赖框架本身来做这件事可能已经足够复杂了。(我不熟悉 Zend,所以我不知道这是否可以设置,我知道存储过程可以处理这个问题。)
这是一个更好的.. 见Pop On the Audit Trail
我刚刚创建了一个名为 Comp_Hist_Log 的新表,然后在 BEFORE UPDATE 挂钩中定义了旧数据 $oldData = $array('fieldname1', 'fieldname2')
然后在我的数据库 gui 钩子文件中的 AFTER_UPDATE 钩子处。我添加了这段代码
sql("插入Comp_Hist_Log
( Com_Rec_Id
, old_data
, new_data
, ChangedDate
, ChangedBy
)
VALUES('{$data['Record_Id']}', '{$oldData}', '{$messageData}', '{$data['LastUpdated']}', '{$memberInfo['username']} ')", $eo); 返回 TRUE;
希望它有帮助..它确实有效。