【问题标题】:PHP/mysql Missing Row on queryPHP/mysql 查询时缺少行
【发布时间】:2013-02-07 23:04:41
【问题描述】:

我在 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 开头,然后包括所有剩余的邮政编码。这不是里程问题(即丢失的 zip 在半径范围内 - 正如我在 phpMyAdmin 中运行查询时显示的那样)。

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

谢谢!

【问题讨论】:

  • 你在你的列表中得到40339,所以可能是订单还是?

标签: php mysql


【解决方案1】:

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

【讨论】:

  • 感谢所有快速响应 - 消除了第一次提取工作。
【解决方案2】:

PHP中不需要做隐式循环,试试

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

【讨论】:

  • 放大一点-代码中的确切错误是在循环开始之前,fetch() 被额外调用了一段时间。使用 fetchAll() 更好。
  • 您无需使用-&gt;fetch 运行循环并构建您自己的数组。 fetchAll 可以更有效地为您做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2021-10-14
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多