【发布时间】:2013-01-21 07:47:06
【问题描述】:
我真的希望有人可以帮助我解决这个问题,因为它已经困扰了我好几天了。我的用户表上有一个插入后触发器,它在每次插入后将一条记录插入到审计表中。如果我在命令行上手动执行插入语句,这可以正常工作。但是,当我的 web 表单插入到表中时,插入到审计表中的所有值都是空值。我在想这可能是权限问题,所以我将 CURRENT_USER() 和 USER() 添加到要插入审计表的触发器中。它显示触发器正在由“admin”用户执行,该用户是触发器的所有者。
这是我的触发器:
DELIMITER ^^
CREATE TRIGGER UsersInsert AFTER INSERT ON Users
FOR EACH ROW
BEGIN
INSERT INTO `users_audit` (`username`, `address`, `email`)
VALUES
(USER(), NEW.address, NEW.email);
END
^^
这将在审计表中插入以下内容:admin@localhost, null, null
这里是管理员用户的权限:
GRANT ALL PRIVILEGES ON `MyDB`.* TO 'admin'@'localhost' WITH GRANT OPTION
就像我说的,它可以在 mysql 命令行中完美运行。但由于某种原因,从 Web 表单执行时,“NEW”值都是空值。
请帮忙。提前致谢。
2013 年 2 月 6 日更新:
我尝试了类似的触发器,但使用“更新后”并且它工作正常。所以这个问题被隔离到插入。这也证明这不是权限问题。
【问题讨论】:
-
可能是用户权限问题...您在命令行和 Web 应用程序中使用相同的 MySQL 用户吗?
-
是的。我对两者都使用管理员帐户。
-
我也看到了这个帖子并检查了“autocommit”,发现它在我的系统上默认打开,所以没有帮助:stackoverflow.com/questions/2921546/…