2010-05-26 115 views
2

我试图使用count()函数获取数组中元素的数量,结果有点令我费解,请考虑以下示例。PHP使用count()与数组

假设提供的用户ID是错误的,因此没有匹配,那么计数函数的结果是不是0?但它是1.你能向我解释为什么?

感谢

$q = mysql_query("select password from users where user_name = '" . $userID . "'"); 
$check = mysql_fetch_array($q); 

$result = count($check); 

echo "RESULT:" . $result; 
+0

调试代码能给你一些洞察到$结果居然是。另外,不要忘记你的朋友is_array()。 – allnightgrocery 2010-05-26 18:16:02

回答

7

这是对结果集中的行进行计数的错误方法。首先,从文档上mysql_fetch_array()

返回一个字符串数组, 对应于提取行,或 FALSE如果没有更多的行。

埃尔戈,如果我们做到这一点

echo count(false); 

我们可以看到输出为1。为什么?因为count()文档告诉我们,以及

如果变种是不是数组或一个对象与 实现可列接口, 1将被返回。

做一个适当的数量,使用mysql_num_rows()

$q = mysql_query("select password from users where user_name = '" . $userID . "'"); 
$result = mysql_num_rows($q); 

if (0 == $result) 
{ 
    // no rows in result 
} 
1

count()返回1,因为在发生故障的$check情况不是数组。

documentation

如果无功是不是数组或实现的可数接口的对象,1将返回

但你无论如何都应该直接处理错误情况(如果查询你的代码不应该达到你分析结果的程度)。也正如其他人已经正确地说,这不是如何计算查询返回结果的数量,因为这是mysql_num_rows()

0

mysql_fetch_array如果没有更多的行返回false。 count(false) = 1.

如果要计算结果数,请尝试使用mysql_num_rows

1

使用mysql_num_rows而不是count。 count返回1的值FALSE

+0

$ numrows = mysql_num_rows($ q); – 2010-05-26 18:18:31