2017-07-25 81 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