PHP:在TIMESTAMP()格式列中更新查询不更新时间?

时间:2016-05-15 18:15:02

标签: php mysql sql-update timestamp

我正在处理php中的用户在线和离线状态。我的问题是我需要在用户登录时更新TIMESTAMP()列中的时间。但是这里更新查询不起作用。你能告诉我如何更新吗

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

2 个答案:

答案 0 :(得分: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类型。

理想情况下,最好使用"现在"今天的时间和日期方法,您的列类型应为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

答案 1 :(得分: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);