PDO使用DATEADD func删除所有行不起作用

时间:2015-01-29 12:44:30

标签: mysql pdo

而不是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

1 个答案:

答案 0 :(得分:1)

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)将从表中选择并删除所有行。

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

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