繁体   English   中英

使数据库记录的更改可跟踪的最佳方法?

[英]Best way to make changes of database records trackable?

我有一个带有HTML前端的PHP Webapp,供用户在MySQL数据库表中进行更改。 我还为旧记录创建了一个存档表,以便在用户更改记录时将其移入。

但是我不仅要将旧记录保存在存档表中,而且还希望获得特别更改了哪些列。

由于基于Web的数据库前端的性质,当用户每次打开记录时,我无法轻易获得更改了哪些列的脚本,脚本将为行的内容提供服务,以将其传递至HTML input元素的value字段中。我的前端(或selecttextarea等)。

当用户在input字段中更改其值并提交数据时,浏览器不仅会发送更改后的字段,还会首先发送所有已提供给前端的数据,包括用户更改的值。 因此,即使值未更改,我也必须更新该行。

Original data   Passed to frontend  Changes by user      Data being sent back
  id=827
val1=arthur     val1=arthur                              val1=arthur
val2=ford       val2=ford                                val2=ford
val3=tricia     val3=tricia         val3=trillian        val3=trillian
val4=zaphod     val4=zaphod                              val4=zaphod
val5=marvin     val5=marvin                              val5=marvin
   .
   .
   .

在上面的示例中,提交数据后,后端将简单地在存档表中复制当前记录,并使用val1val5的值更新“活动”记录。

现在,我要创建一个“ 最后更改”页面,在该页面上您可以查看哪些信息已更改,例如:

2014-04-08: User 'douglas' changed val3 in row #827 

要么…

2014-04-08: User 'eoin' changed val1, val2 and val3 in row #137 

目前,我看到两种可能的解决方案:

  • 将当前行与存档表中的对应行进行比较,以获取行不同的列(!)的名称。 有MySQL函数可以执行此操作吗? 我需要在PHP中实现吗?

  • 在PHP后端中,从前端接收到数据后,立即检查哪些值与原始记录不同,以仅存储更改后的值。 因此,我将自动考虑相关列。

在subimt上,您具有“更新” /“或也许没有”字段,并且您具有原始值,对吗? 这两个数据集都可以这样表示:

$updated_data = ['first_name' => 'John', 'last_name' => 'White'];
$original_data = ['first_name' => 'Peter', 'last_name' => 'White'];

现在,您可以使用array_diff_assoc()和array_keys()查找修改后的字段:

$updated_fields = array_keys(array_diff_assoc($updated_data, $original_data));

print_r($updated_fields);  # List of updated fields

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM