2017-05-05 98 views
0

我们正与一个WordPress系统上的created_at一个问题。不知怎的,一些用户获得该领域更新的“随机”为无效值,所以它得到的设置为“00000000”的日期时间。我们还没有找到WP代码的原因,我们现在正在分析项目中的少数插件。它有一个庞大的代码和用户群,所以我们认为使用MySQL触发器来捕捉这个“随机”更新可能会更快。如何创建触发器的MySQL 5.6

的事情是我们以某种方式继续击中或触发代码语法错误,并瘸SQLer的,因为我们是,我们需要帮助,试图找出它可能是什么。

我们正在绑做到的是:

  • 发现当用户表得到更新
  • 检查是否created_at已经修改了行
  • 插入旧数据到我们刚刚创建的新表为此目的(user_registration_changed_records)。

我们决定检查每一行,以防万一出现一些奇怪的行为。

DELIMITER $$ 
CREATE TRIGGER `user_register_updated` BEFORE UPDATE ON `wp_t8y31tcd9u_users` 
FOR EACH ROW 
BEGIN 
IF OLD.created_at != NEW.created_at 

INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.ID, OLD.created_at) 
END IF; 
END;$$ 
DELIMITER ; 

在此先感谢您的任何建议!

语法错误

#1064 - 你有一个错误的SQL语法;检查对应于你的MySQL服务器版本在线路附近使用“INSERT INTO user_registration_change_records(USER_ID,created_at)VALUES(OLD.I”正确的语法手册6

+1

是语法错误保密的吗? – Shadow

+0

对不起@Shadow这只是我觉得晦涩难懂,这里是#1064 - 你在你的SQL语法错误;检查对应于你的MySQL服务器版本在线路附近使用“INTO user_registration_change_records INSERT(USER_ID,created_at)VALUES(OLD.I” 6个 –

回答

1

你有几个语法错误:

  • 失踪then关键字前insert(这是一个错误消息涉及到)
  • 后插入的行
  • 额外;后失踪;end

至少这些是我可以看到的。

DELIMITER $$ 
CREATE TRIGGER `user_register_updated` BEFORE UPDATE ON `wp_t8y31tcd9u_users` 
FOR EACH ROW 
BEGIN 

    IF OLD.created_at != NEW.created_at THEN 

     INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.ID, OLD.created_at); 
    END IF; 
END$$ 
DELIMITER ; 

据欢颜使用上compound statement syntax MySQL手册,因为这些都可以在那里找到。

+0

非常感谢@shadow正确的语法,我检查该链接现在的手册。我一到办公室就会尝试纠正我们的代码。 –