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


PHP: Update query not update time in TIMESTAMP() format column?

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

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

这里有错误:

"'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);

'" . 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类型也是有效的(根据RiggsFilly下面的评论)。

所以

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

如果两者都不是,那么我怀疑是VARCHAR,这是个坏主意。

DATE、DATETIME和TIMESTAMP类型上的引用

  • https://dev.mysql.com/doc/refman/5.5/en/datetime.html

如果这些都不适用,那么您的$user_id可能会失败,并且不知道它是否包含值。

请确保它确实有一个值,因此请检查是否有错误。

请参阅以下链接http://php.net/manual/en/mysqli.error.php和http://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不会混用

食品说明:

您当前的代码对SQL注入是开放的。将准备好的语句PDO已准备好的报表一起使用。