当我使用 PHPMyAdmin 运行以下 SQL 查询时,它工作得非常好,但是当我从网页运行它时,我得到一个错误。我在 StackOverflow 上四处寻找类似的问题,并尝试了他们的建议,但是唉……有谁知道为什么它不能在网页上工作?
变量放入后的 SQL 查询(示例):
SELECT place FROM locations WHERE (( 69.1 * ( latitude - 51.4700000 ) ) * ( 69.1 * (latitude - 51.4700000 ) )) + ( ( 69.1 * ( longitude - 5.5528000 ) * COS( 51.4700000 / 57.3 )) * ( 69.1 * ( longitude - 5.5528000 ) * COS( 51.4700000 / 57.3 ) ) ) < 976.5625 ORDER BY ((69.1 * ( latitude - 51.4700000 ) ) * ( 69.1 * ( latitude - 51.4700000 ) )) + ( ( 69.1 * ( longitude - 5.5528000 ) * COS( 51.4700000 / 57.3 ) ) * ( 69.1 * ( longitude - 5.5528000 ) * COS(51.4700000 / 57.3 ) ) ) ASC
PHP($radius 和 $start 在此之前定义):
$latitude = $start['latitude'];
$longitude = $start['longitude'];
$r = pow($radius, 2);
$inrange = "SELECT place FROM locations_2 WHERE ((69.1 * (latitude - $latitude)) * (69.1 * (latitude - $latitude))) + ((69.1 * (longitude - $longitude) * COS($latitude / 57.3)) * (69.1 * (longitude - $longitude) * COS($latitude / 57.3))) < $r ORDER BY ((69.1 * (latitude - $latitude)) * (69.1 * (latitude - $latitude))) + ((69.1 * (longitude - $longitude) * COS($latitude / 57.3)) * (69.1 * (longitude - $longitude) * COS($latitude / 57.3))) ASC";
$result = mysql_query($inrange) or die(mysql_error());
我得到的错误信息是:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) * (69.1 * (`latitude` - ))) + ((69.1 * (`longitude` - ) * COS( / 57.3)) * (69' at line 1
更奇怪的是它起作用了……我把它都写下来了,就像我现在向你展示它的方式一样,很高兴看到它运行得很好。那是今天早些时候。现在大约一个小时前,我再次尝试了它,但由于某种原因它停止了工作。我真的不记得改变了什么。
编辑
感谢大家。我想通了,结果发现我犯了一个愚蠢的错误。它今天早些时候工作,因为所有用户都设置了他们的位置。现在,我有一些用户在遍历他们时不这样做,经度和纬度都是空的。