2013-03-19 146 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