2013-03-19 107 views
1

如果时间到了,我写出了一个脚本来将用户的密钥活动状态更改为0。当我开始的时候,我把start_time设置为time();比设定“60”的时间要多少天。用这个计算剩余时间?

根据我目前的做法,我如何计算一天或几小时或几分钟剩余的时间?

$user_info['days'] = "60" 

`start_time` = 1332219600 


function setup() { 
    mysql_connect('localhost', 'stresser_main', 'ZLLAUkuLIUU'); 
    mysql_select_db('stresser_main'); 
    $query = mysql_query("SELECT * FROM `keys` WHERE `active`='1'"); 
    while ($user_info = mysql_fetch_array($query)) { 
     $time_ago = strtotime("-" . $user_info['days'] . " day"); 
     $time_ago_other = strtotime("+" . $user_info['days'] . " day"); 
     mysql_query("UPDATE `keys` SET `active`='0' WHERE `start_time` < $time_ago AND `id`='" . $user_info['id'] . "'"); 
    } 
} 
+1

'的strtotime();'可以采取两个参数,第二个是时间戳,即是起点(它会默认到现在),所以如果你做'的strtotime(“+ 60天”的,1332219600) ;'它会告诉你到期的时间戳 – Waygood 2013-03-19 11:32:49

回答

0
  1. 不要做这样的思考。只更新查询。如果您有1000个活动= 1的用户已过期,那么您将执行1000次更新查询。这样您将执行1个查询来解决您的问题。没有选择,而需要。

    mysql_query("UPDATE keys SET active = 0 WHERE active = 1 AND start_time < $something");

  2. 不要像'WHERE start_time < NOW()'的SQL一切。你也可以在sql上进行计算。在这里你有很多SQL函数https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 这将更快,更安全。

  3. 请勿使用mysql_函数。使用mysqli_或PDO。

  4. 在表上使用datetime字段,而不是整数unix时间戳。您将能够使用SQL日期函数。

  5. 使用\ DateTime()代替strtotime。

+0

PDO Imo很烦人,mysqli不提供尽可能多的函数和mysql是好的。 – user2186257 2013-03-19 15:49:23

+0

现在使用mysqli :)第一次使用它;我真的很喜欢它。 – user2186257 2013-03-19 18:16:31

+0

PDO烦人? mysqli有没有那么mysql的功能?我建议你尝试OOP并阅读sql注入。 另请阅读:http://www.php.net/manual/en/function.mysql-query.php mysql_已正式被弃用。没有更多的支持。 我给你5分想一想。希望它会有所帮助。如果是,费率。 – imclickingmaniac 2013-03-19 20:30:20