mysql触发器或事件在一段时间(60秒)后执行更新

PHP我用和创建了登录网页MySQL。当登录失败时,MySQL数据库将记录该尝试。每 60 秒尝试将重置为零。3 次尝试后,网页将不允许我登录该用户名。


我有 2MySQL张桌子叫


userdb(用户名、密码和尝试)



loginA(用户和登录尝试)


userdb如果我无法登录,我设法记录了尝试的次数。ForloginAttempt用于使触发器变userdb回尝试归零。我设法导致尝试重置为零,但不是 60 秒。它立即发生。如果我添加了 do sleep (60),它将在网页上冻结 60 秒。我想知道有什么方法可以在 60 秒后激活触发器而不在网页上加载 60 秒?


MYSQL代码


CREATE TRIGGER login_condition

AFTER UPDATE ON loginA FOR EACH ROW

BEGIN

 DO SLEEP(40);

 UPDATE userdb set attempts = 0 where username=new.username; 

END

PHP 代码(这个用来激活触发器)


$query = "UPDATE loginA SET date='$date' WHERE username='$user'";

                storeData($conn,$query);

我希望此触发器在 60 秒后激活并影响网页加载。


富国沪深
浏览 295回答 1
1回答

12345678_0001

将最后一次尝试的时间放在loginA表中。使用事件调度程序每隔几分钟执行一次查询,而不是触发器。如果自上次尝试以来已超过 60 秒,则查询可以将尝试重置为 0。CREATE EVENT reset_loginON SCHEDULE EVERY 1 MINUTEDO&nbsp; &nbsp; UPDATE userdb AS u&nbsp; &nbsp; JOIN loginA AS l ON u.username = l.username&nbsp; &nbsp; SET u.attempts = 0&nbsp; &nbsp; WHERE u.attempts > 0 AND l.last_attempt < DATE_SUB(NOW(), INTERVAL 1 MINUTE);
打开App,查看更多内容
随时随地看视频慕课网APP