我用这个命令从mysql获取存储在数组中的数据

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

现在,当我使用count on$ndata时,它会重新运行1;尽管它是空的。
当我对返回的数据运行mysql-num-rows时,它将重新显示0行。但是当我将数据转换为$ndata,然后运行count时,它返回1。我要它返回行数。
谢谢
有人能解释一下为什么会有问题以及如何解决吗?

最佳答案

你的逻辑是错误的:你不测试mysql_num_rows($data) == 0的情况。如果是这种情况,则代码执行的路径与行数为1时相同($ndata = mysql_fetch_assoc($data);)。但是没有更多的行要返回(根本没有行),所以mysql_fetch_assocreturns 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的唯一两个值。

10-07 18:48