mysql_fetch_row没有返回完整数组

时间:2011-11-27 04:57:58

标签: php mysql arrays

我试图使用以下代码在MySQL中循环遍历行。不幸的是,mysql_fetch_row函数只返回我的查询的第一行(我用print_r确认了这一点)。当我使用mysql_num_rows时,它返回该查询的正确行数(2)。知道为什么mysql_fetch_row只返回第一行吗?

$query = 'SELECT firstName FROM profiles WHERE city="Phoenix" and lastName ="Smith"';
$result = mysql_query($query);
$row = mysql_fetch_row($result);
print_r($row); //This returns only 1 array item: Array ( [0] => John)

$a=mysql_num_rows($result);
print_r($a); //This returns 2

我也在MySQL中运行相同的查询,它返回两行(“John”和“Jim”)。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

只需执行mysql_fetch_row两次(或循环)。根据定义(如果您阅读文档),它一次只返回一行。所以:

while ($row = mysql_fetch_row($result)) {
    var_dump($row);
}

答案 1 :(得分:2)

您想将其置于while循环中:

while ($row = mysql_fetch_array($result)) {

   $firstName = $row['firstName'];

   echo("$firstName<br />");

}

这样做对于找到的每个结果(行),它会获取您想要的数据并显示它。因此它获取第一个结果,显示名称,循环返回顶部,获取第二个结果,显示该名称等等,然后一旦您没有更多符合查询条件的结果,则while循环结束。

答案 2 :(得分:1)

PHP按照缓冲区的顺序访问SQL结果。您需要运行循环来访问所有内容。

如果您希望将所有内容加载到数组中:

$allRows=array();
while($row=mysql_fetch_assoc($result) {
  $allRows[]=$row;
}

答案 3 :(得分:1)

您可以使用以下任何一项:

while ($row = mysql_fetch_array($result)) 
{
   echo $row['firstName'];
}

while ($row = mysql_fetch_assoc($result)) 
{
   echo $row['firstName'];
}

while ($row = mysql_fetch_object($result)) 
{
    echo $row->firstName;
}