【发布时间】:2012-03-16 09:41:48
【问题描述】:
如何删除超过30天的mysql记录?我的代码将删除所有记录,即使是昨天插入的。
require('../conn_db.php');
mysql_select_db("my_news",$conn);
mysql_query("SET NAMES utf8");
mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(NOW(), INTERVAL 1 MONTH)");
mysql_close("my_news");
和mysql表
date int(10)
1321095600
1322107200
...
1328288400
1328290440
【问题讨论】:
-
您显示的内容看起来不错,但根本不应该工作:它应该引发语法错误,因为
date是保留字。您确定您正在查看正确的查询 -
使用
SET NAMES正是mysql_real_escape_string()不安全的原因。请改用mysql_set_charset()。 -
使用int而不是date数据类型来存储日期有什么原因吗?
-
您说的是“30 天”和“月”,这在大约 50% 的情况下是不一样的。你真的要删除数据吗?难道你不想在读取你的新闻项目的 SELECT 上执行这个 WHERE 子句吗?
-
只有一个观察;有两种不同的方法,要么使用 PHP 提供的服务器时间,要么使用 mysql 提供的服务器时间。即使两者在同一台机器上,它们也可能彼此不同。
标签: php mysql sql-delete