簡體   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