Php mysql触发器或事件在一定时间(60秒)后执行更新
我用Php mysql触发器或事件在一定时间(60秒)后执行更新,php,mysql,Php,Mysql,我用PHP和MySQL创建了登录网页。登录失败时,MySQL数据库将记录尝试。每60秒,尝试将重置为零。尝试3次后,该网页将不允许我登录该用户名 我有2个名为MySQL的table userdb(用户名、密码和尝试次数) 及 loginA(用户和登录尝试) 如果登录失败,我设法在userdb中记录了尝试次数。对于loginatetest用于使触发器将userdb更改回尝试零。我试图将其重置为零,但不是60秒。它马上就发生了。如果我添加了do sleep(60),它将在网页上冻结60秒。我想知道有
PHP
和MySQL
创建了登录网页。登录失败时,MySQL
数据库将记录尝试。每60秒,尝试将重置为零。尝试3次后,该网页将不允许我登录该用户名
我有2个名为MySQL的table
userdb(用户名、密码和尝试次数)
及
loginA(用户和登录尝试)
如果登录失败,我设法在userdb
中记录了尝试次数。对于loginatetest
用于使触发器将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代码(用于激活触发器)
我希望此触发器在60秒后激活,从而影响网页加载。将上次尝试的时间放入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);
创建事件重置\u登录
按计划每1分钟
做
将userdb更新为u
在u.username=l.username上以l的身份加入loginA
设置u.T=0
其中u.attempts>0,l.last_attempts
调用,而不是更新存储过程,该存储过程将在60秒后过期,就像触发器一样
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);