我正在处理php中的用户在线和离线状态。我的问题是我需要在用户登录时更新TIMESTAMP()列中的时间。但是这里更新查询不起作用。你能告诉我如何更新吗
$setLogged = mysqli_query($conn, "UPDATE user SET user_onlineStatus='" . time() . "'WHERE user_id='" . $user_id . "'");
答案 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类型。
理想情况下,最好使用"现在"今天的时间和日期方法,您的列类型应为DATE
或DATETIME
。旁注:如上所述,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.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));
一些未知数:
mysqli_
以外的任何其他内容进行连接,则这些不同的API不会混用。<强> Foonotes:强>
您目前的代码向SQL injection开放。使用prepared statements或PDO与prepared 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);