2012-12-25 48 views
0

你好在PHP腳本我有以下MySQL查詢MySQL的CURRENT_TIMESTAMP - 時間戳拋出錯誤的結果

$query_players = "SELECT (current_timestamp -`Online_since`) AS `Since` FROM `streams` WHERE `Team` = $temp AND `Online` = 1 ORDER BY `Viewers` DESC"; 

那麼我:

$since = round($obj_players->Since /3600); 

正如你可能會想到$自應包含多久玩家已經在幾小時內上網了。奇怪的是它有錯誤的結果。它就像MySQL的時間變得更快一樣:P 例如大約15分鐘後它已經顯示「1小時後在線」,大約30分鐘後又顯示2小時等等。

任何人都知道什麼可能是錯的?也許current_timestamps是問題?

+0

online_since字段的數據類型是什麼? – SaidbakR

+0

您應該仔細閱讀[適當的SQL轉義](http://bobby-tables.com/php),因爲在查詢中看到裸變量確實是一個不好的跡象。 – tadman

回答

2

current_timestamp是不是真的以秒爲單位。因此,將差值除以3600不會產生小時,但會產生一些任意值。

18分鐘後的差異是1800round(1800/3600) = round(0.5)當然給出1

根據您的實際色譜柱類型,使用timediff()timestampdiff()進行計算。

1

嘗試使用TIMESTAMPDIFF:

$query_players = "SELECT TIMESTAMPDIFF(HOUR, NOW(), `Online_since`) AS `Since` 
        FROM `streams` 
        WHERE `Team` = $temp 
        AND `Online` = 1 
        ORDER BY `Viewers` DESC";