我有下面的代码块,它在本地主机上很好地工作,但在活动站点上不工作。我更新了xampp,以便在服务器上运行PHP 7,以防出现问题。
<?php
try {
$minutes = 10;
$status = date('Y-m-d H:i:s', time() - $minutes * 60);
$getOnlineUsers = $db->query("SELECT user_online.*, members.username,
(SELECT COUNT(id) FROM user_online WHERE last_active > '$status' AND memberID = '0') AS guest
FROM user_online
LEFT JOIN members ON members.memberID = user_online.memberID
WHERE last_active > '$status' ");
$total = ($getOnlineUsers->rowCount());
if ($total > 0) {
while ($row = $getOnlineUsers->fetch()) {
echo '<ul>';
if ($row['memberID'] == '0') {
echo '<li>guest' . $row['id'] . '</li>';
} else {
if ($row['memberID'] == '1') {
echo '<li>' . $row['memberID'] . ' ' . $row['username'] . ' <a>ADMIN</a></li>';
} else {
echo '<li>' . $row['memberID'] . ' ' . $row['username'] . '</li>';
}
}
echo '<li>online: ' . $row['last_active'] . '</li>';
echo '</ul>';
echo '<br />';
}
} else {
echo 'nobody online';
}
} catch (PDOException $e) {
echo $e->getMessage();
}
echo '<br />';
echo $total; // added just to see number rows returned
?>我想做的是列出“在线/访问我的网站”的所有成员和客人。last_active值作为时间戳存储,并在用户查看新页面时更新,其想法是,任何未在“实时”的10分钟内更新其last_active的用户都不会显示在结果中。
就目前情况而言,我没有收到任何错误,但是如果我乱搞代码,那么就会创建错误,所以报告也很好。
我在脚本的底部添加了$total;,以显示返回了多少行,这里我看到了一个问题,因为它正在返回'0‘--只有在实时站点tho上,localhost是可以的。
如果我将$minutes=10更改为$minutes=90,那么在直播站点上它就能工作了!然而,如果我到'90‘以下,它就不会。
我只是完全困惑的问题是什么,因为它的工作在本地主机,但没有在现场。我已经检查过所有的数据库字段都是相同的,值正在被更新。一切看起来都很好。
有什么明显的事情我在这里看不到,或有什么建议,这可能会发生吗?
发布于 2016-10-21 13:45:08
我注意到您正在计算PHP中的时间戳,然后将其与MySQL值进行比较。这确实冒着PHP和MySQL服务器不在同一时间的风险。
在localhost上,不存在混淆的可能性,但您的活动服务器有可能在MySQL服务器上运行,比方说,在MySQL服务器上运行。(可悲的是,我从experience T_T上说到)如果MySQL服务器是一台不同的物理机器,那么问题会变得更糟,因为它们可能相隔几秒钟甚至几分钟(或者,同样地,与经验不同步46分钟.)
最安全的方法是不要像这样交叉计算日期。相反,考虑使用:
WHERE last_active > DATE_SUB(NOW(), INTERVAL $minutes MINUTE)但是,除此之外,您还应该确保PHP和MySQL在时间上是一致的:
SELECT NOW();
echo date("Y-m-d H:i:s");发布于 2016-10-21 13:45:19
让我知道last_active字段插入更新通过php函数还是mysql查询?
这两个时间是不同的。
在这里,您将在查询中传递PHP日期和时间。因此,如果您使用mysql保存last_active数据,那么它将在基于php时间的选择中产生问题。
因此,如果您使用mysql ()函数保存last_active,那么在select中使用mysql的日期函数。
https://stackoverflow.com/questions/40178083
复制相似问题