我使用此命令将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.我希望它返回行数。
由于
有人可以解释为什么会出现问题以及如何解决问题?
答案 0 :(得分:3)
你的逻辑是错误的:你没有测试mysql_num_rows($data) == 0
的情况。如果是这种情况,您的代码将执行与行数为1($ndata = mysql_fetch_assoc($data);
)时相同的路径。但是没有更多的行要返回(根本没有行),所以mysql_fetch_assoc
returns false
。 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;
}
}
您可以在第一个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;
}
}