【问题标题】:mysql_num_rows always returns 1mysql_num_rows 总是返回 1
【发布时间】:2010-09-22 19:13:44
【问题描述】:

结果总是1:

$sql = 'SELECT COUNT(Vote) FROM ' . $table;
$res = mysql_query($sql, $conn);
$vote_total = mysql_num_rows($res);

我在 phpMyAdmin 中运行了 $sql 查询,它返回 3,所以查询不是问题。 $vote_total 全局初始化为 0,因此 1 来自某个地方。我还需要提供哪些其他信息才能更轻松地帮助我?

谢谢, 瑞恩

【问题讨论】:

    标签: php mysql mysql-num-rows


    【解决方案1】:

    mysql_num_rows 返回选定行的数量,而不是某一行的字段。使用mysql_fetch_row 获取您在查询中选择的行:

    $sql = 'SELECT COUNT(Vote) FROM ' . $table;
    $res = mysql_query($sql, $conn);
    $row = mysql_fetch_row($res);
    $vote_total = $row[0];
    

    您也可以使用mysql_result 获取一行并获取某个字段:

    $vote_total = mysql_result($res, 0, 0);
    

    这会获取第一行(从零开始)并返回第一个字段(从零开始)。

    【讨论】:

    • 在这种情况下,我需要做的就是弄清楚表中有多少行。所以为此我可以使用 mysql_num_rows。但是“投票”列包含三个值之一:A、B 或 C。如果我现在想计算 A、B 或 C 出现的次数,我也会使用 num_rows,对吗?仅在我需要数据时才获取行,对吗?谢谢,瑞恩。
    • 其实我猜不是,因为 mysql_num_rows 没用。您是说表示行数的值存储在字段中,这就是为什么我需要使用 mysql_fetch_row 或 _array 获取该字段的原因?
    • @Ryan S.:您需要使用不同的查询:SELECT Vote, COUNT(Vote) FROM table GROUP BY Vote。这将返回三行(每个 Vote 值一个),其中包含两个字段(Vote 和具有该值的行数)。
    【解决方案2】:

    永远只有一排。在那一行中将计票。

    $sql = 'SELECT COUNT(Vote) FROM ' . $table;
    $res = mysql_query($sql, $conn);
    $vote_array = mysql_fetch_array($res);
    $vote_total = $vote_array[0];
    

    如果要统计mysql_num_rows 的投票数,则必须选择所有行。

    【讨论】:

      【解决方案3】:

      该查询确实只返回一行。您想要的是从查询中检索 value

      $row = mysql_fetch_array($res);
      $vote_total = $row[0];
      

      【讨论】:

        【解决方案4】:

        棘手的部分是,即使 sql 查询包含一个 COUNT() 语句,它仍然像任何其他查询结果一样。如果您发出了常规查询,MySQL 将返回包含单个列的行,其中包含将返回的行数。另一方面,mysql_num_rows() 只计算实际执行的查询结果中的行数。在这种情况下,它始终是单行。

        你想要的是:

        $sql = 'SELECT COUNT(Vote) FROM ' . $table;
        $res = mysql_query($sql, $conn);
        $data = mysql_fetch_row($res);
        $vote_total = $data[0];
        

        【讨论】:

          猜你喜欢
          • 2016-11-21
          • 2019-10-10
          • 2014-04-13
          • 2017-03-20
          • 2013-11-04
          • 2011-12-09
          • 2012-07-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多