【问题标题】:PHP - mySQL query issuePHP - mySQL 查询问题
【发布时间】:2011-04-10 10:34:06
【问题描述】:

我在我的 SQL 数据库中使用 lon/lat 的半径区域中找到最近的位置(使用来自 Google API 的 long/lat),这是我的查询:

$query = "SELECT id, ( 3959 * acos( cos( radians(".$lat.") ) * cos( radians( lat ) ) * cos( radians( lon ) - radians(".$long.") ) + sin( radians(".$lat.") ) * sin( radians( lat ) ) ) ) AS distance FROM finder_location HAVING distance < 25 ORDER BY distance LIMIT 0 , 1";

    $result = mysql_query( $query );

    $row = mysql_fetch_array($result);
    echo $row['id'];

查询在 phpMyAdmin 中正确返回为:

id  9
distance 0.74066713768542

所以,查询正在正确编译...

但是,当我尝试在 PHP 中输​​出时,出现以下错误:

您的 SQL 语法有错误; 检查对应的手册 您的 MySQL 服务器版本 '>) ) * cos( 弧度(lat))* cos(弧度(lon) -弧度(-73.988307))'在第1行警告:mysql_fetch_array():提供 参数不是有效的 MySQL 结果 资源

【问题讨论】:

  • 您需要查看在 PHP (echo $query;) 中生成的最终查询。您的某些变量似乎为空。
  • 可能$lat变量包含无效值,检查一下

标签: php mysql sql latitude-longitude


【解决方案1】:

您的 php $lat 变量未正确填充。您可以在 mysql 错误中看到 html 标记的结尾。调试您的 $lat$long 以确保它们在查询之前具有正确的值。

【讨论】:

  • 这些变量直接输出经纬度:40.66677, -73.988307
  • 也许它在你的浏览器中输出&lt;span&gt;40.66677&lt;/span&gt;,看起来像40.66677,但实际上有一些html包裹了这个值。
  • 不,只是两个回显的换行符:40.66677
    -73.988307
  • echo 不会产生 html 换行符。我认为他们正在以某种方式潜入您的变量。试试echo "::$lat::";,结果应该是::40.66677::,没有任何换行符或中间的任何东西。
  • 奇怪的编码脚本添加了换行符,现在可以使用了,非常感谢!
猜你喜欢
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2012-03-01
  • 2015-09-15
  • 2012-04-15
相关资源
最近更新 更多