在localhost但不是实时网站

时间:2016-10-21 13:35:08

标签: php sql

我有以下代码块,它在localhost上完美运行,但在实际站点上不起作用。我已经更新了我的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 $minutes=10; “实时”的结果中没有显示。

目前我没有收到任何错误,但如果我搞乱了代码,那么就会产生错误,因此报告工作正常。

我在脚本底部添加了$total;以显示返回了多少行,在这里我看到一个问题,因为它返回'0' - 仅在现场网站上,localhost是细

如果我将$minutes=10更改为$minutes=90,那么在实际网站上就可以了!但是,如果我低于'90'那么它就不会。

我对此问题感到困惑,因为它适用于localhost,但之后却不在实时网站上。 我已经检查过所有数据库字段是否相同,值是否正在更新确定..所有内容似乎都很好。

有什么明显的东西我没有在这里看到,或有任何关于为什么会发生这种情况的建议?

2 个答案:

答案 0 :(得分:0)

我注意到您正在计算PHP中的时间戳,然后将其与MySQL值进行比较。这确实存在PHP和MySQL服务器不在同一时间的风险。

localhost上,确实不存在混淆的可能性,但是当您的MySQL服务器使用UTC时,您的实时服务器可能会运行PHP,例如BST。 (遗憾的是,我从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");

答案 1 :(得分:0)

让我通过php date函数或mysql查询知道last_active字段插入更新?

两者都是不同的。

在这里,您可以在查询中传递PHP日期和时间。因此,如果您使用mysql保存last_active数据,那么它会根据php日期时间在select中创建一个问题。

因此,如果使用mysql now()函数保存last_active,则在select中使用mysql的date函数。