4

我已经看过所有的例子,这就是我到目前为止所得到的。

我的表很简单:

学校(表名) - School_ID - 纬度 - 经度 - 县 - extrainfo

这是我的代码:

<?php

 $con = mysql_connect("xxx","xxx","xxx");



 if (!$con) {

            die('Could not connect: ' . mysql_error());

 } else {}



 mysql_select_db("xxx", $con);

 $latitude = "36.265541";

 $longitude = "-119.207153";

 $distance = "1"; //miles



 $qry = "SELECT *, (3958.75 * ACOS(SIN(" . $latitude . " / 57.2958)*SIN(lat / 57.2958)+COS(" . $latitude . " / 57.2958)*COS(lat / 57.2958)*COS(long / 57.2958 - " . $longitude . " / 57.2958))) as distance FROM schools WHERE (3958.75 * ACOS(SIN(" . $latitude . " / 57.2958)*SIN(lat / 57.2958)+COS(" . $latitude . " / 57.2958)*COS(lat / 57.2958)*COS(long / 57.2958 - " . $longitude . " / 57.2958))) <= " . $distance;

 $results = mysql_query($qry);
 if (mysql_num_rows($results) > 0) {
            while($row = mysql_fetch_assoc($results)) {
                            print_r($row);
            }
 } else {}

 mysql_close($con);

 ?>

但是当我尝试运行它时出现此错误:

警告:mysql_num_rows():提供的参数不是有效的 MySQL 结果资源

4

2 回答 2

3

首先,'long' 是 MySQL 中的保留关键字。您需要将其括在反引号中,如下所示:

SELECT `long`,lat FROM schools

保留关键字的完整列表可在此处找到:保留字

如果您可以使用 phpMyAdmin 之类的工具,我建议您在那里运行您的查询测试。

否则,请在运行 mysql_query() 后尝试在代码中执行此操作:

print(mysql_errno().' '.mysql_error());

这应该会给你 MySQL 生成的错误代码和错误消息。除了关键字问题之外,查询看起来还可以,但这会明确地告诉您。

于 2009-04-26T04:12:23.183 回答
1

老实说,我建议您只获取所有学校的所有纬度/经度,并通过您的 PHP 代码循环运行 Haversine 函数。

于 2009-04-26T03:54:51.073 回答