2016-05-15 246 views
1

我正在使用php的用戶在線和離線狀態。我的問題是,當用戶登錄時,我需要更新TIMESTAMP()列中的時間。但是,這裏更新查詢不起作用。你能告訴我,如何更新它PHP:更新查詢不更新TIMESTAMP()格式列中的時間?

$setLogged = mysqli_query($conn, "UPDATE user SET user_onlineStatus='" . time() . "'WHERE user_id='" . $user_id . "'"); 
+0

您可以通過執行'「更新用戶設置user_onlineStatus = NOW()」,爲響應' – RiggsFolly

+0

謝謝簡化。 '時間()'功能可以正常使用,但問題是在更新查詢 –

+1

搞好的建議'「更新用戶設置user_onlineStatus = NOW()其中USER_ID =‘$ user_ID的’」' – RiggsFolly

回答

1

錯誤是在這裏:

"'WHERE user_id='" 

應該是:

"' WHERE user_id='" 

另外,如果你遇到了這樣的錯誤,當你查詢不起作用,總是用var_dump()打印查詢並直接在命令行中運行它。

$sql = "UPDATE user SET user_onlineStatus='" . date('Y-m-d H:i:s') . "' WHERE user_id='" . $user_id . "'"; 
// var_dump($sql) 
$setLogged = mysqli_query($conn, $sql); 
+0

我都試過,但沒有工作 –

+0

節目,有什麼命令'顯示創建表的用戶;'打印 –

+0

這裏是取值爲字符串(64)「更新用戶設置user_onlineStatus =‘1463336827'WHERE USER_ID = '14’」'當我加入'的var_dump($ SQL)' –

2

'" . time() . "'你將它作爲字符串文字傳遞,它是一個函數。

UPDATE user SET user_onlineStatus = time() WHERE user_id='" . $user_id . "' 

然而,time()收益爲Unix時間戳1463338870格式,而不是2016-05-15 19:01:39這就是爲什麼它在這裏沒有你,看到你的user_onlineStatus列是TIMESTAMP類型。理想情況下,您最好使用今日時間和日期的「now」方法,列類型應該是DATEDATETIME。旁註:如上所述,TIMESTAMP類型也是有效的(根據下面的RiggsFolly的評論)。

所以

"UPDATE user SET user_onlineStatus = now() WHERE user_id='$user_id' "; 

如果不是非此即彼,那麼我懷疑它是VARCHAR這是一個壞主意。

上DATE,DATETIME參考和TIMESTAMP類型

如果沒有那些爲你工作,那麼你的$user_id可能會失敗,是未知的它是否包含一個值。

確保它有一個值,所以檢查錯誤。

請參考以下鏈接http://php.net/manual/en/mysqli.error.phphttp://php.net/manual/en/function.error-reporting.php 並將其應用於您的代碼。

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$setLogged = mysqli_query($conn, 

"UPDATE user SET user_onlineStatus = NOW() 
WHERE user_id='" . $user_id . "' ") or die(mysqli_error($conn)); 

幾個未知數:

  • 如果您正在使用的會話。如果是這樣,請確保您已開始會話。
  • 連接的MySQL API。如果您使用mysqli_以外的任何其他接口連接,則這些不同的API不會混合。

Foonotes:

你現在的代碼是開放的SQL injection。使用prepared statementsPDOprepared statements

+0

@ImranHasan如果你不會按照我的意見,請按照這個建議 – RiggsFolly

+0

* Howdy Smokey * @RiggsFolly :-) –

+0

希望你別介意編輯我的老太婆 – RiggsFolly