php count函数没有在mysql_fetch_assoc上显示正确的计数

时间:2011-04-03 14:48:34

标签: php mysql count

我使用此命令将mysql_fetch_assoc中的数据存储到数组中

if(mysql_num_rows($data) > 1){
                while($row = mysql_fetch_assoc($data)){
                    $ndata[] = $row;
                }
            } else {
                $ndata = mysql_fetch_assoc($data);
            }

现在当我在$ndata上使用count时,它会返回1;虽然它是空的。

当我对返回的数据运行mysql_num_rows时,它会返回0行。但是,当我将数据转换为$ ndata然后运行count时,它返回1.我希望它返回行数。

由于

有人可以解释为什么会出现问题以及如何解决问题?

4 个答案:

答案 0 :(得分:3)

你的逻辑是错误的:你没有测试mysql_num_rows($data) == 0的情况。如果是这种情况,您的代码将执行与行数为1($ndata = mysql_fetch_assoc($data);)时相同的路径。但是没有更多的行要返回(根本没有行),所以mysql_fetch_assoc returns falsecount(false)会返回1,因为这就是count的工作方式。

这样做:

$rows = mysql_num_rows($data);
if($rows == 0) {
    return null;
}
else if($rows == 1){
    $ndata = mysql_fetch_assoc($data);
} else {
    while($row = mysql_fetch_assoc($data)){
        $ndata[] = $row;
    }
}

您可以在第一个null分支中返回array()if;这些是count返回0的唯一两个值。

答案 1 :(得分:2)

我认为mysql_fetch_assoc()返回false(请参阅doc),count(false)返回1.

答案 2 :(得分:1)

$data = mysql_query($query);
while($row = mysql_fetch_assoc($data)){
      $ndata[] = $row;
}
if(count($ndata) == 1) $ndata = $ndata[0];

运行返回1行和

的查询
$data = mysql_query("SELECT * FROM online LIMIT 1");
print_r($ndata);

结果

Array ( [timestamp] => 1301826108 [ip] => 213.186.122.2) 

使用多行运行查询...

$data = mysql_query("SELECT * FROM online");
print_r($ndata);

结果

Array
(
    [0] => Array
        (
            [timestamp] => 1301848228
            [ip] => 67.195.112.29
        )

    [1] => Array
        (
            [timestamp] => 1301826108
            [ip] => 213.186.122.2
        )

    [2] => Array
        (
            [timestamp] => 1301825465
            [ip] => 77.88.28.246
        )

    [3] => Array
        (
            [timestamp] => 1301763579
            [ip] => 69.171.224.251
        )

)

答案 3 :(得分:0)

似乎我终于得到了你需要的东西(然而,问题仍然非常含糊,而且很难确定)。但无论如何。

$ndata = array();
while($row = mysql_fetch_assoc($data)){
  $ndata[] = $row;
}

现在,您可以从count($ndata)获得所需的结果。它将返回0表示没有行,1表示1行,如果返回更多行,则返回任意数字。宾果!

但是如果你仍然计划得到不同类型的阵列,我应该警告你不要这样做 始终明确说明您希望得到什么样的结果:

$ndata = array();
if ($type=="row"){
  $ndata = mysql_fetch_assoc($data);
} elseif ($type=="array"){
  while($row = mysql_fetch_assoc($data)){
    $ndata[] = $row;
  }
}