[英]SQL query returns wrong timestamp
我正在研究一個涉及Sever-Sent事件的項目,並使用庫libSSE: https : //github.com/licson0729/libSSE-php
一個事件從數據庫獲取時間戳,對其進行一些處理,然后在數據庫中更新所述時間戳值。 PHP代碼如下所示:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
require_once('lib/libsse/src/libsse.php');
//create the event handler
class messages extends SSEEvent {
public function update($messages){
//send notification data to the user
return $messages;
}
public function check(){
$sql = mysqli_connect("localhost", "username", "password");
mysqli_select_db($sql, "db");
$username = 'name';
$a = mysqli_query($sql, "SELECT `last_checked` FROM `users` WHERE `name` = '".$username."';");
$a = mysqli_fetch_row($a);
mysqli_query($sql, "UPDATE `users` SET `last_checked` = now() WHERE `name` = '".$username."';");
$b = mysqli_query($sql, "SELECT `last_checked` FROM `users` WHERE `name` = '".$username."';");
$b = mysqli_fetch_row($b);
return json_encode($a[0]."---".$b[0]);
}
}
$sse = new SSE();//create a libSSE instance
//adjust libSSE settings
$sse->exec_limit = 0; //the execution time of the loop in seconds. Default: 600. Set to 0 to allow the script to run as long as possible.
$sse->sleep_time = 5; //The time to sleep after the data has been sent in seconds. Default: 0.5.
$sse->client_reconnect = 2; //the time for the client to reconnect after the connection has lost in seconds. Default: 1.
$sse->keep_alive_time = 10; //The interval of sending a signal to keep the connection alive. Default: 300 seconds.
$sse->addEventListener('messages',new messages());//register your event handler
$sse->start();//start the event loop
它應該將舊值和新值提供給更新函數,然后將數據發送給用戶。 但是,如果數據庫中的值例如為“ 2015-12-16 11:00:00”,而當前時間為“ 2015-12-16 15:11:00”,則會得到以下輸出:“ 2015-12-16 15:11:00 --- 2015-12-16 15:11:00”。
因此,新值是兩次,而不是舊值,然后是新值。
如果我將三個查詢放在單獨的文件中並執行它們,則會得到所需的結果(“ 2015-12-16 11:00:00 --- 2015-12-16 15:10:00”)。 last_checked列的類型為timestamp,默認值為NULL,並且沒有屬性“ on update current timestamp”。
有誰知道為什么在使用SSE時為什么要兩次獲得新的時間戳?
因為timestamp
格式僅下降到秒而不是毫秒....並且更新顯然不需要一秒鍾。 嘗試在更新和更新日期查詢之間放置sleep(1)
來確認這一點。
$a = mysqli_query($sql, "SELECT `last_checked` FROM `users` WHERE `name` = '".$username."';");
$a = mysqli_fetch_row($a);
mysqli_query($sql, "UPDATE `users` SET `last_checked` = now() WHERE `name` = '".$username."';");
sleep(1); //sleep for 1 second to prove my point
$b = mysqli_query($sql, "SELECT `last_checked` FROM `users` WHERE `name` = '".$username."';");
$b = mysqli_fetch_row($b);
return json_encode($a[0]."---".$b[0]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.