0

我有一个删除子句,它从我的数据库中删除“已查看”列日期时间值超过 24 小时的行。我的代码运行良好,除了查看列的默认值为 0000-00-00 00:00:00。在这种情况下,具有默认值的每一行数据也会被删除。如何更改我的查询以防止这种情况发生?

我的代码:

$delete_expired_notifications_query= "DELETE FROM notifications WHERE user_id= '".$u_id."' 
AND viewed < NOW() - INTERVAL 24 HOUR";

谢谢

4

2 回答 2

6

只需添加另一个条件,使用=!

DELETE 
FROM notifications 
WHERE user_id= '".$u_id."' 
      AND viewed < NOW() - INTERVAL 24 HOUR
      AND viewed != '0000-00-00 00:00:00'

作为旁注,SQL Injection如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-19T17:27:46.137 回答
2

明确排除:

$delete_expired_notifications_query= "DELETE FROM notifications WHERE user_id= '".$u_id."' 
AND viewed < NOW() - INTERVAL 24 HOUR" AND viewed != '0000-00-00 00:00:00';
于 2013-01-19T17:27:44.590 回答