2017-07-25 84 views
1

我需要爲表更改創建審計記錄。對於我用這個觸發MYSQL審計程序和觸發器

BEGIN 
CALL proc_audit_trasabilitate(new.stare,new.serie,new.id_palet); 
END 

調用觸發這裏面的過程:

BEGIN 
DECLARE v_username VARCHAR(50); 
SELECT @php_user_name into v_username; 
INSERT INTO stari_istoric (stare,serie,id_palet,username) VALUES(p_stare,p_serie,p_id_palet,v_username); 
END 

基本上觸發插入作品和用戶名等領域之後插入但是當我使用一個新的觸發器(在更新我的表格後,用戶名將被上傳,默認值爲NULL。

@php_user_name填充像這樣:

if (isset($_SESSION['username'])) { 
    require_once 'libraries/Audit.class.php'; 
    $db_ses_set = Audit::set_mysql_session_parameter('php_user_name',$_SESSION['username'],$db; } 

與Audit.class:

<?php 
class Audit { 

public static function set_mysql_session_parameter($parameter_name,$parameter_value, $db) { 
       $query = "SET @" . $parameter_name . " = '" .$parameter_value. "';"; 
       $result = $db->query($query); 
       return $result; 
      } 
} 

?> 
+0

php_user_name變量是如何填充的? – fancyPants

+0

檢查我的編輯。我還想提一提的是,如果我使用@php_user_ip與用戶名相同的方式,則在兩種情況下(在插入觸發器和更新觸發器之後)插入IP。 – rob1n

回答

0

當您使用更新觸發:舊值將被刪除,一個新的值將是「插入」。我覺得你的情況,你不知何故返回:舊值,這就是爲什麼該值爲默認,NULL

  1. 插入 - >新價值
  2. 刪除 - >:舊值
  3. 更新 - >:new &:舊值
+0

這是什麼? SQL Server?這個問題被標記爲MySQL。沒有插入或刪除的表格。 – fancyPants

+0

抱歉是最後一部分是SQL Server ... 看看鏈接也許這可以幫助你 https://stackoverflow.com/questions/17681308/get-old-value-in-mysql-trigger -after-update-statement – hammerthea

+0

您的鏈接問題討論了在更新後觸發器中當然沒有'OLD'值的問題。這個問題中的OP甚至不使用'OLD'值。你的第一句話絕對是無稽之談。一個簡單的錯誤消息,不會出現'old'值,而是使用'new'值。 – fancyPants