【问题标题】:MySQLi count(*) always returns 1MySQLi count(*) 总是返回 1
【发布时间】:2011-04-06 11:58:05
【问题描述】:

我正在尝试计算表中的行数,并认为这是正确的方法:

$result = $db->query("SELECT COUNT(*) FROM `table`;");
$count = $result->num_rows;

但计数总是返回(int)1。如果我在 phpMyAdmin 中使用相同的查询,我会得到正确的结果。它位于一张桌子上,所以我也尝试测试$count[0],但返回NULL

这样做的正确方法是什么?

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    你必须获取那一条记录,它将包含 Count() 的结果

    $result = $db->query("SELECT COUNT(*) FROM `table`");
    $row = $result->fetch_row();
    echo '#: ', $row[0];
    

    【讨论】:

    • 谢谢!所以 num_rows 应该只用于SELECT * 而不是SELECT COUNT
    • 或多或少,是的。 num_rows 可以告诉您有多少条结果记录已传输到客户端。如果这是您想知道的数字,那么您应该使用 num_rows。如果您想知道数据库中有多少条记录(不将数据传输到客户端),请使用 Count(*)。
    【解决方案2】:

    始终尝试进行关联提取,这样您就可以轻松地在多个案例结果中获得您想要的结果

    这是一个例子

    $result = $mysqli->query("SELECT COUNT(*) AS cityCount FROM myCity")
    $row = $result->fetch_assoc();
    echo $row['cityCount']." rows in table myCity.";
    

    【讨论】:

    • 好奇多案例结果是什么意思?使用 case 语句进行多次计数的选择?
    【解决方案3】:

    我觉得这种方式更具可读性:

    $result = $mysqli->query('select count(*) as `c` from `table`');
    $count = $result->fetch_object()->c;
    echo "there are {$count} rows in the table";
    

    并不是说我反对数组...

    【讨论】:

      【解决方案4】:

      $result->num_rows;仅返回受查询影响的行数。当您对表执行计数(*)时,它只返回一行,因此您不能得到除 1 之外的其他结果。

      【讨论】:

      • 不正确。 mysqli_result::$num_rows 返回结果集的行数。 mysqli::$affected_rows 返回受查询影响的行数。
      猜你喜欢
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2011-09-26
      • 2011-02-02
      • 1970-01-01
      相关资源
      最近更新 更多