我正在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类型。
理想情况下,您最好使用今天的时间和日期的"现在"方法,您的列类型应该是DATE
或DATETIME
。旁注:如前所述,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与已准备好的报表一起使用。