Php mysql具有触发器的奇怪行为

Php mysql具有触发器的奇怪行为,php,mysql,sql,triggers,Php,Mysql,Sql,Triggers,我有一个讨论表,它存储了我网站上帖子的数据 现在我有2个触发器,其中一个在添加新行时插入path列,另一个在更新行时更新路径,如下所示: CREATE TRIGGER discussions_trigger BEFORE INSERT ON discussions FOR EACH ROW BEGIN DECLARE next_id INT; SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TAB

我有一个讨论表,它存储了我网站上帖子的数据

现在我有2个触发器,其中一个在添加新行时插入path列,另一个在更新行时更新路径,如下所示:

CREATE TRIGGER discussions_trigger BEFORE INSERT ON discussions FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='discussions');
IF(NEW.visibility<1)
THEN
SET NEW.path = CONCAT('discussions.php?id=',next_id);
ELSEIF(NEW.visibility>=1)
THEN
SET NEW.path = CONCAT('private.php?id=',next_id);
END IF;

CREATE TRIGGER discussions_update_trigger BEFORE UPDATE ON discussions FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = OLD.id;
IF(NEW.visibility<1)
THEN
SET NEW.path = CONCAT('discussions.php?id=',next_id);
ELSEIF(NEW.visibility>=1)
THEN
SET NEW.path = CONCAT('private.php?id=',next_id);
END IF;
虽然这样做很正常,但每隔一段时间,当我尝试插入或更新表讨论时,会出现以下错误:

未定义用户“abhishek”@“未知IP”

但是,用户abhishek只允许来自本地主机

在尝试了一切之后,我发现删除触发器,然后重新创建它们可以解决问题。当我再次遇到错误时,我重新创建了触发器,它成功了。这里有什么问题?

运行show triggers\G并检查定义器是否设置为user@localhost.

如果不是,则将触发器的定义者修改为user@localhost. 语法如下:

创建DEFINER='username'@'localhost'触发器\u name触发器定义


有关详细讨论,请参阅问题的注释。

您是如何创建触发器的?是通过mysqli吗?另外,您能在DB上列出触发器的详细信息吗?使用how触发器\G并检查定义值?它是user@localhost?@visakh我使用默认的mysql客户端创建触发器。似乎我不能在mysql客户端中使用how-triggers\G。它给出了错误。很抱歉,这是我这边的一个类型…命令是show triggers\GI请注意定义器没有设置为user@localhost而是user@someipCREATE DEFINER='root'@'localhost'触发器\u名称应该可以工作。