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);
- 1 回答
- 0 关注
- 294 浏览
添加回答
举报
0/150
提交
取消