我想删除时间差为5分钟的每一行。我使用time()作为int。Mysql删除时间差()
mysql_query("DELETE FROM users WHERE time()-time > 300");
查询的问题...
我想删除时间差为5分钟的每一行。我使用time()作为int。Mysql删除时间差()
mysql_query("DELETE FROM users WHERE time()-time > 300");
查询的问题...
time()
是一个PHP函数 - 并在SQL绝对没有任何意义。
您应该:
unix_timestamp(now())
可能做的伎俩。time()
超出SQL查询,因此它由PHP进行评估。
例如,使用第二个想法,我想你可以做这样的事情:
mysql_query("DELETE FROM users WHERE " . time() . "-time > 300");
假设时间是在用户表中的列,这是你所需要的:
mysql_query("DELETE FROM users WHERE NOW() - INTERVAL 300 SECOND > time");
NOW()是将数据库服务器上的时间而不是Web服务器带回的函数。
只要确保数据库服务器和Web服务器上的时钟同步时间
下面是使用SELECT
mysql> select now(),(now() - INTERVAL 300 SECOND);
+---------------------+-------------------------------+
| now() | (now() - INTERVAL 300 SECOND) |
+---------------------+-------------------------------+
| 2011-04-15 16:21:41 | 2011-04-15 16:16:41 |
+---------------------+-------------------------------+
你可以通过突出显示代码块并按下Ctrl-K来格式化代码块,或者单击编辑器工具栏中的“{}”按钮。 – 2011-04-15 20:35:36
的mysql_query( “DELETE FROM用户WHERE时间<“。”(样本time() - 300)。“'”);
并且此查询将由mysql缓存
请务必在实际SQL查询中使用字符串连接 - 这可能会导致SQL注入。总是使用SQL参数绑定。不幸的是,在PHP中,唯一的选择是使用'mysql_real_escape_string'和字符串连接。 :-( – hdima 2011-04-15 20:37:08
)在许多情况下,我会同意你的看法,但是当这样做*(仅仅使用PHP函数的结果)*时,实际上并没有太多的SQL注入风险,如果使用整数,需要像字符串一样转义:使用intval();;;并且有准备语句,使用MySQLi或PDO *(mysql是旧扩展名,不应该用于新项目)* – 2011-04-15 20:39:13
当然,在这种情况下可以使用字符串连接而不使用转义的time()结果,只想添加我对未来将会看到你的答案的更一般情况的评论 – hdima 2011-04-16 09:18:00