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);
代替 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);