2011-04-15 37 views

回答

5

time()是一个PHP函数 - 并在SQL绝对没有任何意义。

您应该:

  • 使用一个MySQL的datetime functions
    • 为了得到一个UNIX时间戳,我想unix_timestamp(now())可能做的伎俩。
  • 或获得time()超出SQL查询,因此它由PHP进行评估。


例如,使用第二个想法,我想你可以做这样的事情:

mysql_query("DELETE FROM users WHERE " . time() . "-time > 300"); 
+1

请务必在实际SQL查询中使用字符串连接 - 这可能会导致SQL注入。总是使用SQL参数绑定。不幸的是,在PHP中,唯一的选择是使用'mysql_real_escape_string'和字符串连接。 :-( – hdima 2011-04-15 20:37:08

+1

)在许多情况下,我会同意你的看法,但是当这样做*(仅仅使用PHP函数的结果)*时,实际上并没有太多的SQL注入风险,如果使用整数,需要像字符串一样转义:使用intval();;;并且有准备语句,使用MySQLi或PDO *(mysql是旧扩展名,不应该用于新项目)* – 2011-04-15 20:39:13

+0

当然,在这种情况下可以使用字符串连接而不使用转义的time()结果,只想添加我对未来将会看到你的答案的更一般情况的评论 – hdima 2011-04-16 09:18:00

4

假设时间是在用户表中的列,这是你所需要的:

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   | 
+---------------------+-------------------------------+ 
+0

你可以通过突出显示代码块并按下Ctrl-K来格式化代码块,或者单击编辑器工具栏中的“{}”按钮。 – 2011-04-15 20:35:36

0

的mysql_query( “DELETE FROM用户WHERE时间<“。”(样本time() - 300)。“'”);
并且此查询将由mysql缓存