PHP / mysql在查询时缺少行

时间:2013-02-07 23:04:42

标签: php mysql

我在PHP脚本中运行以下查询:

$radius_query = "SELECT zip, ( 3959 * acos( cos( radians(" . $latitude .") ) * cos(         radians( lat ) ) * cos( radians( lng ) - radians( " . $longitude . ") ) + sin( radians(" .     $latitude .") ) * sin( radians( lat ) ) ) ) AS distance 
FROM ZIP HAVING distance < ". $radius;
$radius_result = $db_zipcode->query($radius_query);


if (!$radius_result){
   echo 'Could not run query: ' . mysql_error();
   exit;
   }

$row = $radius_result->fetch(PDO::FETCH_ASSOC);

    While($row = $radius_result->fetch(PDO::FETCH_ASSOC))
{
     $zip[] = $row['zip'];
}


foreach ($zip as $zip_display){
echo $zip_display . ",  " . '';
}    

查询本身可以处理一个小错误 - 它不会返回第一行数据。它应该返回与此类似的邮政编码列表:

40324,40339,40340,40347,40356 ......

这是我在phpMyAdmin中运行相同查询时得到的结果。

但是,当我在PHP脚本中运行上面的查询时,结果集以40339开头,然后包含所有剩余的邮政编码。它不是一个里程问题(即丢失的拉链在半径范围内 - 因为它在我在phpMyAdmin中运行查询时显示)。

我错误地在PHP查询中错过了第一行数据?它不仅仅是一个显示问题,因为当我将查询结果插入数据库时​​,它也缺少第一行。

谢谢!

2 个答案:

答案 0 :(得分:2)

问题出现在第一行fetch,它们占据了你的第一行...... 在没有 $row = $radius_result->fetch(PDO::FETCH_ASSOC);的情况下运行此项 一天前我遇到了同样的问题。

答案 1 :(得分:1)

不需要在PHP中执行隐式循环,请尝试

$zip = $radius_result->fetchAll(PDO::FETCH_ASSOC);