0

'viewed'列のdatetime値が24時間を超える行をデータベースから削除するdelete句があります。表示された列のデフォルト値が0000-00-0000: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 に答える