2015-11-19 26 views
2

我有一些問題,當我試圖用lastactivity時間(-1分鐘)獲取用戶,我根本沒有得到任何結果。從最後一分鐘獲得活動(PHP)

這是我的代碼:

if (isset($_POST['message'])) { 
    if (!empty($_POST['msg'])) { 
     $chatArray = array(); 
     $s = $_database->query("INSERT INTO chat(`username`, `text`, `date`) VALUES('".$_database->real_escape_string($_POST['username'])."', '".$_database->real_escape_string($_POST['msg'])."', '".TIME()."')"); 
     $newID = $_database->insert_id; 
     $_database->query("UPDATE chatusers SET lastactivity=TIME() WHERE username='".$_POST['username']."'"); 
     $timestamp = (isset($_COOKIE['chatTimestamp'])) ? $_COOKIE['chatTimestamp'] : TIME(); 

     $q = $_database->query("SELECT * FROM (SELECT * FROM chat WHERE `date` > ".$timestamp." ORDER BY date DESC LIMIT 0, 24) AS a ORDER BY DATE ASC"); 
     if ($q->num_rows == 0) { echo '0'; } 
     else { 
     while ($rad = $q->fetch_array()) { 
      // $chatArray["message"][] = array("msgID" => $rad['msgID'], "message" => $rad['text'], "timestamp" => $rad['date'], "date" => date('H:i', $rad['date']), "username" => $rad['username']); 

     } 
     $query = $_database->query("SELECT * FROM chatusers WHERE `lastactivity` > (NOW() - INTERVAL 1 minute)"); 
     var_dump($query); 
     while ($row = $query->fetch_array()) { 
      $chatArray["users"][] = array("username" => $row['name'], "lastactivity" => $row['lastactivity']); 
     } 
     print_r($chatArray); 
     } 
    } 
    } 

正如你可以看到之前我嘗試獲取結果我更新lastactivity,我仍然得到NUM_ROWS 0,如果我選擇的行更改爲"SELECT * FROM chatusers WHERE lastactivity < (NOW() - 1 minute)"我得到的所有數據庫中的用戶。

我在這裏失蹤了什麼?

回答

1

PHP的time(),MySQL的TIME(),和MySQL的NOW()是不相同的。另外,系統時間和MySQL服務器時間可以在不同的時區。

PHP的time()返回時間戳(整數)。

MySQL的TIME()返回時間,如12:34:31所示。

MySQL的NOW()返回日期和時間字符串,如2015-11-19 12:34:31

修復:

  • 如果您使用的是datetime列,使用SQL NOW()在所有三個聲明(INSERTUPDATESELECT)。
  • 如果您使用的是timestamp列,請在所有三列中使用SQL TIME()
+0

現在改變了,但我仍然有同樣的問題,有沒有問題,因爲即時通訊在數據庫中使用int? – Tommy

+0

@Tommy看我的編輯。如何定義表「chat」中的「date」列? –

+0

聊天中的日期沒有問題,它是chatuser中的最後一個活動,即問題 – Tommy

相關問題