我有一个删除子句,用于从我的数据库中删除“已查看”列日期时间值超过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";
谢谢
答案 0 :(得分:6)
只需添加其他条件,请使用=!
DELETE
FROM notifications
WHERE user_id= '".$u_id."'
AND viewed < NOW() - INTERVAL 24 HOUR
AND viewed != '0000-00-00 00:00:00'
作为旁注,如果值( s )来自外部,则查询容易被SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。
答案 1 :(得分: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';