Mysql 更改数据库中的标志以显示某人是;“在线”;但是它';它不工作了

Mysql 更改数据库中的标志以显示某人是;“在线”;但是它';它不工作了,mysql,linux,php,Mysql,Linux,Php,下面是正在发生的事情的一些细目 我现在遇到的最大问题是,在login.php中 更改数据库中的标志以显示某人处于联机状态 if($table=='chatmodels'){ $sql="update ".$table." set loginStatus=1 where user=".$id['user']; $upd=mysql_query($sql); 它应该将“chatmodels.loginStatus”更改为一个人一次等于1 已成功登录,但不起作用。它过去是

下面是正在发生的事情的一些细目

我现在遇到的最大问题是,在login.php中 更改数据库中的标志以显示某人处于联机状态

if($table=='chatmodels'){
              $sql="update ".$table." set loginStatus=1 where user=".$id['user'];
$upd=mysql_query($sql);
它应该将“chatmodels.loginStatus”更改为一个人一次等于1 已成功登录,但不起作用。它过去是有用的

我很确定我的数据库配置有问题

这是我数据库的截图

从屏幕截图中,我看到
chatmodels
表位于
qoc1
数据库中

由于您使用的是php,因此需要执行以下两项操作之一:

选项1:按如下方式使用:

mysql_select_db('qoc1')在调用更新查询之前

if($table=='chatmodels'){ 
          mysql_select_db('qoc1');
          $sql="update ".$table." set loginStatus=1 where user=".$id['user']; 
$upd=mysql_query($sql); 
选项2:将
qoc1
放入查询本身:

if($table=='chatmodels'){ 
          $sql="update qoc1.".$table." set loginStatus=1 where user=".$id['user']; 
$upd=mysql_query($sql); 
试试看

其他需要记住的事情

  • 如果表是MyISAM,它应该立即运行
  • 如果表是InnoDB,请确保autocommit=1
美国东部时间2011年12月15日15:28更新


尝试将
'or die'
放在
$upd=mysql\u查询($sql)之后并查看返回的基于mysql的错误消息

您已经得到了一些建议,可以帮助您解决此问题,但是会话何时过期的问题呢?如果
loginStatus==1
,是否存在cron作业或您发布的内容之外的其他内容,使非活动用户将其返回到0


我认为实现相同结果的更好方法是让每个页面加载提交一个“lastSeen”时间戳。然后,您的“在线”用户列表由“lastSeen”在可配置或可编程时间段内的所有人组成,而不是那些标志尚未重置为0的人。

谢谢!我会给它一个快照数据库实际上是在一个配置文件中引用的,但我也尝试在你给我的两个示例中调用数据库,但仍然没有什么我不知道,它只是停止工作?我认为它可能与“id”字段有关,我不知道它是如何生成的,也不知道它的目的是什么。我将“id”设置为与“user”匹配,但这也没有帮助。在执行查询之前回显查询。检查它是否具有所有应迁移的数据。迁移是因为这似乎是代码问题,而不是数据库问题。有关此问题的持续性,请参阅此问题: