rowCount()返回错误的行数


rowCount() returns incorrect number of rows

我正试图在我的用户配置文件上为创建一个在线/离线栏。它似乎不能100%工作,因为它总是在网上显示。我正在使用以下脚本:

<?php 
    $user = $req_user_info['username'];
    $sql = $db->query("SELECT COUNT(*) FROM blog_active_users
                                       WHERE `username` = {$user}");
    $num_rows = $sql->rowCount();
    if (!$sql || ($num_rows < 0)) {
        echo '<div class="span2 alert alert-error"><h4>offline</h4></div>';
    } else if ($num_rows > 0) {
        echo '<div class="span2 alert alert-success"><h4>online </h4></div>';
    }
?> 

我已经用num_rows > 0== 0尝试了这个脚本,但似乎什么都不起作用。我也试着用另一种方式,先是num_row > 0,然后是num_row < 0,但没有成功。

也为以下人员提供答案。这是我的答案脚本:

    <?php 
$user = $req_user_info['username'];
$sql = $db->query("SELECT * FROM blog_active_users WHERE `username` = '".$req_user_info['username']."'");
$num_rows = $sql->rowCount();
if(!$sql || ($num_rows == 0)){
echo '<div class="span2 alert alert-error"><h4>offline</h4></div>';
}else{
echo '<div class="span2 alert alert-success"><h4>online </h4></div>';
}
?>      

您选择的是COUNT(*),因此您的请求总是会得到一个答案:行计数本身。

你可以在COUNT上设置一个别名并使用它…

$sql = $db->query("SELECT COUNT(*) AS my_count FROM blog_active_users WHERE `username` = {$user}");
$num_rows = $sql->fetch(PDO::FETCH_OBJ)->my_count;

或者选择所有内容:

$sql = $db->query("SELECT * FROM blog_active_users WHERE `username` = {$user}");
$num_rows = $sql->rowCount();