PDO 删除带有 DATE_ADD 的所有行 func 不起作用

PDO delete all rows with DATE_ADD func doesnt work

代替 CRON 函数从旧的登录尝试中清除数据库,我正在尝试使用查询来删除具有 DATE_ADD 间隔函数的所有行,但它不想工作。

$sql = $db->query("DELETE FROM failed_logins 
WHERE last_attempt < DATE_ADD(CURDATE(), INTERVAL 15 MINUTE)");

尝试使用 NOW() 而不是 CURDATE(),但它根本无法识别 INTERVAL,只会删除所有内容。

这就是 last_attempt 列内部的样子 - 2015-01-29 13:33:02

mysql> SELECT NOW() as `now`,
              DATE_ADD(NOW(), INTERVAL 15 MINUTE) AS `now + 15 minutes`,
              DATE_ADD(CURDATE(), INTERVAL 15 MINUTE) AS `midnight + 15 minutes`;

+---------------------+---------------------+-----------------------+
| now                 | now + 15 minutes    | midnight + 15 minutes |
+---------------------+---------------------+-----------------------+
| 2015-01-29 12:54:56 | 2015-01-29 13:09:56 | 2015-01-29 00:15:00   |
+---------------------+---------------------+-----------------------+
1 row in set (0.00 sec)

由于列 last_attempt 中的值可能是过去的值,很明显 WHERE last_attempt < DATE_ADD(NOW(), INTERVAL 15 MINUTE) 将 select 并删除 table 中的所有行。

我假设您想删除 早于 15 分钟的条目;正确的条件使用 DATE_SUB() 获取过去 15 分钟的时间戳 :

DELETE FROM failed_logins 
WHERE last_attempt < DATE_SUB(NOW(), INTERVAL 15 MINUTE);