Php 三个mysql触发器 分隔符// 在对用户进行更新之前创建触发器logsupdate 每行 开始 如果new.p监禁了old.p监禁了那么 设置new.jailtime=now(); 如果new.pVIP old.pVIP,则 设置new.TM2=now(); 如果new.pAdminLevel为old.pAdminLevel,则 设置new.TM3=now(); 如果结束; 结束// 定界符

Php 三个mysql触发器 分隔符// 在对用户进行更新之前创建触发器logsupdate 每行 开始 如果new.p监禁了old.p监禁了那么 设置new.jailtime=now(); 如果new.pVIP old.pVIP,则 设置new.TM2=now(); 如果new.pAdminLevel为old.pAdminLevel,则 设置new.TM3=now(); 如果结束; 结束// 定界符,php,mysql,triggers,Php,Mysql,Triggers,为什么这不起作用?我试图从上一个问题中找到一个答案,但它在这里给了我错误 MYSQL错误 delimiter // create trigger logsupdate before update on users for each row begin if new.pJailed <> old.pJailed then set new.jailtime = now(); if new.pVIP <> old.pVIP then

为什么这不起作用?我试图从上一个问题中找到一个答案,但它在这里给了我错误

MYSQL错误

       delimiter //
create trigger logsupdate before update on users
for each row 
begin
  if new.pJailed <> old.pJailed then
    set new.jailtime = now();
     if new.pVIP <> old.pVIP then
    set new.TM2 = now();
         if new.pAdminLevel <> old.pAdminLevel then
    set new.TM3 = now();
  end if;
end;//
delimiter ;
在对用户进行更新之前创建触发器logsupdate
每行
开始
如果new.p监禁了old.p监禁了那么
设置new.jailtime=now();
如果new.pVIP old.pVIP,则
设置new.TM2=now();
如果new.pAdminLevel为old.pAdminLevel,则
设置new.TM3=now();
如果结束;
结束;
MySQL说:文档
#1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取第11行“”附近要使用的正确语法

你错过了几个
结束if。另外,
end中不需要分号//。我还添加了一个
Drop Trigger If Exists
子句,以避免在已经存在同名的重复触发器时出错

以下是已更正的触发器(基于):

分隔符//
如果存在logsupdate,则丢弃触发器//
在对用户进行更新之前创建触发器logsupdate
每行
开始
如果new.p监禁了old.p监禁了那么
设置new.jailtime=now();
如果结束;
如果new.pVIP old.pVIP,则
设置new.TM2=now();
如果结束;
如果new.pAdminLevel为old.pAdminLevel,则
设置new.TM3=now();
如果结束;
结束//

定界符您错过了几个
结束if。另外,
end中不需要分号//。我还添加了一个
Drop Trigger If Exists
子句,以避免在已经存在同名的重复触发器时出错

以下是已更正的触发器(基于):

分隔符//
如果存在logsupdate,则丢弃触发器//
在对用户进行更新之前创建触发器logsupdate
每行
开始
如果new.p监禁了old.p监禁了那么
设置new.jailtime=now();
如果结束;
如果new.pVIP old.pVIP,则
设置new.TM2=now();
如果结束;
如果new.pAdminLevel为old.pAdminLevel,则
设置new.TM3=now();
如果结束;
结束//
定界符;


你真的应该更详细地描述你的问题,“不起作用”。@uuerdo done。我的想法是,代码应该在第一次“设置”时完成。但是由于我需要三个分隔符,所以我在同一代码中添加了它们,并且在SQL中无法识别它们//
它看起来好像您丢失了,如果
结束,则
结束
需要
结束/
你真的应该更详细地描述你的问题,而不是“不起作用”。@uuerdo done。我的想法是,代码应该在第一次“设置”时完成。但是由于我需要三个分隔符,所以我在同一代码中添加了它们,并且在SQL中无法识别它们//
它看起来好像您丢失了,如果
结束,则
结束
必须是真正有意义的
end/
。我想了一会儿,“如果”只需要一个“如果结束”。我犯了无意义的错误,谢谢你证明这一点。:)@AlxTioltisan不担心。很乐意帮忙:)我们都去过那里!我刚刚更新了“pAdminLevel”行,它不会实现TM3。有什么线索吗?@AlxTioltisan这是因为pJailed和pVIP也需要更新才能进入If条件的第三级。我如何消除条件的等级?我想要三个不同的分隔符,但不相互依赖。我应该重写整个代码吗?因为正如我所看到的,在“pJailed”排我没有问题。它更新了“狱卒”,这实际上是有意义的。我想了一会儿,“如果”只需要一个“如果结束”。我犯了无意义的错误,谢谢你证明这一点。:)@AlxTioltisan不担心。很乐意帮忙:)我们都去过那里!我刚刚更新了“pAdminLevel”行,它不会实现TM3。有什么线索吗?@AlxTioltisan这是因为pJailed和pVIP也需要更新才能进入If条件的第三级。我如何消除条件的等级?我想要三个不同的分隔符,但不相互依赖。我应该重写整个代码吗?因为正如我所看到的,在“pJailed”排我没有问题。它更新了“狱卒”
create trigger logsupdate before update on users
for each row 
begin
  if new.pJailed <> old.pJailed then
    set new.jailtime = now();
     if new.pVIP <> old.pVIP then
    set new.TM2 = now();
         if new.pAdminLevel <> old.pAdminLevel then
    set new.TM3 = now();
  end if;
end;
MySQL says: DOCUMENTATION

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 11
delimiter //
DROP TRIGGER IF EXISTS logsupdate //
create trigger logsupdate before update on users
for each row 
begin

  if new.pJailed <> old.pJailed then
    set new.jailtime = now();
  end if;

  if new.pVIP <> old.pVIP then
    set new.TM2 = now();
  end if;

  if new.pAdminLevel <> old.pAdminLevel then
    set new.TM3 = now();
  end if;
end//
delimiter ;