MySQL"插入"触发器一直插入空值

时间:2013-02-06 07:13:09

标签: mysql triggers

我真的希望有人可以帮我解决这个问题,因为它已经困扰了我好几天。我的users表上有一个后插入触发器,它在每次插入后将记录插入到审计表中。如果我在命令行上手动执行insert语句,这可以正常工作。但是,当我的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日更新:

我尝试了类似的触发器但是“更新后”并且它正常工作。所以这个问题与插入有关。这也证明了这不是一个许可问题。

2 个答案:

答案 0 :(得分:0)

看起来像网络表单的问题。检查插入Users表的值。它们是NULL吗?

您可以在触发器中更改INSERT语句 -

INSERT INTO `users_audit` (`username`, `address`, `email`)
VALUES (USER(), 'temp address', 'temp email');

确保触发器正常工作。

答案 1 :(得分:0)

好吧,在创建了不同类型的触发器和实验后,我认为插入触发器可能由于某种原因多次触发,实际上同时触发插入和更新触发器,最后一行始终具有空值,这是唯一的记录被插入。真的很奇怪。所以无论如何,为了解决这个问题,我将我的代码更改为了这个,到目前为止它没有任何问题:

DELIMITER ^^

CREATE TRIGGER UsersUpdate AFTER UPDATE ON users
FOR EACH ROW
BEGIN

IF NEW.username IS NOT NULL THEN

IF EXISTS (SELECT 1 FROM users_audit WHERE username = NEW.username) THEN
UPDATE users_audit SET `username` = NEW.username,  `FirstName` = NEW.FirstName, `LastName` = NEW.LastName, `address` = NEW.address, `email` = NEW.email WHERE username = OLD.username;
ELSE
INSERT INTO users_audit (`username`, `FirstName`, `LastName`, `address`, `email`)
VALUES (NEW.username, NEW.FirstName, NEW.LastName, NEW.address, NEW.email);
END IF;

END IF;

END
^^