我在php中处理用户的在线和离线状态。我的问题是,当用户登录时,我需要更新TIMESTAMP()列中的时间。但是这里update查询不起作用。你能告诉我怎么更新它吗?
$setLogged = mysqli_query($conn, "UPDATE user SET user_onlineStatus='" . time() . "'WHERE user_id='" . $user_id . "'");发布于 2016-05-16 02:21:48
错误在这里:
"'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);发布于 2016-05-16 02:45:52
,'" . time() . "',你把它作为字符串文字传递,它是一个函数。
UPDATE user SET user_onlineStatus = time() WHERE user_id='" . $user_id . "'但是,time()以Unix时间戳1463338870格式返回,而不是2016-05-15 19:01:39,这就是它在这里失败的原因,因为user_onlineStatus列是一种时间戳类型。
理想情况下,最好使用今天的时间和日期的"now“方法,列类型应该是DATE或DATETIME。Sidenote:如前所述,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进行连接,则这些不同的API不会混合在一起。脚注:
您当前的代码对是开放的。使用或带有的。
https://stackoverflow.com/questions/37241962
复制相似问题