php - 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 秒后激活并影响网页加载。
解决方案
将最后一次尝试的时间放在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);
推荐阅读
- c# - 具有不同函数调用的嵌套 for 循环
- frama-c - Frama-c 执行时间和堆内存边界证明
- reactjs - 未捕获的类型错误:无法读取 null 的属性“SelectedOption”
- javascript - 返回(值);不能正常工作
- python - 在视图中加载 javascript
- python - Python3:BeautifulSoup4 未返回预期值
- python - 一个复选框,取消选中 PyQt5 / PySide2 中的所有其他复选框
- jsf-2 - 如何将现有的 JSFPortlet 转换为 JSON API
- php - 将 MySQL 选择轮询更改为 Laravel 5.5
- javascript - 如果我单击下一个/上一个,如何立即显示从轮播到我的第二个 div 的活动图像?