Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php count函数未显示mysql\u fetch\u assoc上的正确计数_Php_Mysql_Count - Fatal编程技术网

php count函数未显示mysql\u fetch\u assoc上的正确计数

php count函数未显示mysql\u fetch\u assoc上的正确计数,php,mysql,count,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($da

我使用这个命令将mysql_fetch_assoc中的数据存储到一个数组中

if(mysql_num_rows($data) > 1){
                while($row = mysql_fetch_assoc($data)){
                    $ndata[] = $row;
                }
            } else {
                $ndata = mysql_fetch_assoc($data);
            }
现在,当我使用count on
$nda
时,它返回1;虽然它是空的

当我对返回的数据运行mysql_num_行时,它返回0行。但当我将数据转换为$nda,然后运行count时,它返回1。我希望它返回行数

谢谢


有人能解释一下为什么会出现问题以及如何解决吗?

您的逻辑是错误的:您不需要测试
mysql\u num\u rows($data)==0的情况。如果是这种情况,代码将执行与行数为1时相同的路径(
$ndata=mysql\u fetch\u assoc($data);
)。但是没有更多的行要返回(根本没有行),因此
mysql\u fetch\u assoc
。而
count(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;
    }
}

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

看来我终于得到了您需要的值(然而,这个问题仍然非常模糊,很难确定)。但无论如何

$ndata = array();
while($row = mysql_fetch_assoc($data)){
  $ndata[] = $row;
}
现在您可以从
计数($nda)
中获得所需的结果。它将返回0表示无行,1表示1行,如果返回更多行,则返回任意数字。宾果

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

$ndata = array();
if ($type=="row"){
  $ndata = mysql_fetch_assoc($data);
} elseif ($type=="array"){
  while($row = mysql_fetch_assoc($data)){
    $ndata[] = $row;
  }
}
运行返回1行和1行的查询

$data = mysql_query("SELECT * FROM online LIMIT 1");
print_r($ndata);
结果

Array ( [timestamp] => 1301826108 [ip] => 213.186.122.2) 
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
        )

)
正在运行具有多行的查询

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

Array ( [timestamp] => 1301826108 [ip] => 213.186.122.2) 
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
        )

)


我认为
mysql\u fetch\u assoc()
返回false(请参阅),而
count(false)
返回1。

逻辑没有错误。如果num_rows<1,那么为什么count不返回0。@user658911:您最终执行的是
count(false)
,它返回
1
。请按照我提供的链接(特别是
count
::)进行操作。@Col.shrapanel:我严重怀疑,因为OP的代码已经做到了这一点,我认为我们可以安全地假设它到目前为止正在工作。当然,你可以随便投反对票。@Col.Shrapnel:你现在应该知道我不会和你争论的。祝你有愉快的一天。@Col.Shrapnel:不过不要把你的知识传播得太远。如果你教我们太多,我们可能会停止取笑你。不,这也是我的第一个结论,它是2D数组而不是1D数组(如果只有一行)。@Pekka说来话长,哈哈。事实上它来自序言。@Col我不确定OP一开始问的是什么。他说
我希望它返回行数。
@Pekka这很简单。我会解释的。他根据返回的行数得到不同类型的数组。并试图在数组项的数量上建立进一步的逻辑。@Pekka实际上他不能这样计算成员数。来吧,别再玩弱智游戏了,就为了咬我:)情况都清楚了。count(NULL)等于什么?问题将是无限的…;)@user658911我想问PHP比问我更容易;)使用此代码,只有当numb rows>1时,才能使用count获得行数。此代码用于什么?红外光谱;很难猜测并给出正确的答案。将mysql结果中的数据存储在一个数组中。您将它存储在两种数组中。而且很可能是错误的方式。是否确实需要为单行使用单独的数组?它将需要单独的代码来处理它。您不能依赖于返回的行数。当代码期望嵌套数组时,只能有1行,但我仍然看不出有什么问题,$ndata[0]是第一行/唯一一行,而不是$ndata[0][“id”],然后通过$ndata[“id”]访问它,这仅在返回一行时有效。这个循环将数据提取到数组(不是mysql数组)中,没有“mysql数组”这样的东西。此代码将返回2种数组。因此,您需要两个不同的代码来处理它。但是你不知道该使用哪一个。我的意思是你不能像在代码中那样获取数组的assoc。@我更新了答案,测试了代码,它按预期工作。