2016-05-15 252 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