为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
富国沪深 2022-01-23 10:55:32
PHP我用和创建了登录网页MySQL。当登录失败时,MySQL数据库将记录该尝试。每 60 秒尝试将重置为零。3 次尝试后,网页将不允许我登录该用户名。我有 2MySQL张桌子叫userdb(用户名、密码和尝试)和loginA(用户和登录尝试)userdb如果我无法登录,我设法记录了尝试的次数。ForloginAttempt用于使触发器变userdb回尝试归零。我设法导致尝试重置为零,但不是 60 秒。它立即发生。如果我添加了 do sleep (60),它将在网页上冻结 60 秒。我想知道有什么方法可以在 60 秒后激活触发器而不在网页上加载 60 秒?MYSQL代码CREATE TRIGGER login_conditionAFTER UPDATE ON loginA FOR EACH ROWBEGIN DO SLEEP(40); UPDATE userdb set attempts = 0 where username=new.username; ENDPHP 代码(这个用来激活触发器)$query = "UPDATE loginA SET date='$date' WHERE username='$user'";                storeData($conn,$query);我希望此触发器在 60 秒后激活并影响网页加载。
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

将最后一次尝试的时间放在loginA表中。


使用事件调度程序每隔几分钟执行一次查询,而不是触发器。如果自上次尝试以来已超过 60 秒,则查询可以将尝试重置为 0。


CREATE EVENT reset_login

ON SCHEDULE EVERY 1 MINUTE

DO

    UPDATE userdb AS u

    JOIN loginA AS l ON u.username = l.username

    SET u.attempts = 0

    WHERE u.attempts > 0 AND l.last_attempt < DATE_SUB(NOW(), INTERVAL 1 MINUTE);


查看完整回答
反对 回复 2022-01-23
  • 1 回答
  • 0 关注
  • 294 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信