SQL Query在PHPMyAdmin中运行良好,但在mysql_query中运行不正常

时间:2012-09-23 23:56:52

标签: php mysql sql phpmyadmin

以下SQL查询在使用PHPMyAdmin运行时非常正常但是当我从网页运行它时出现错误。我已经在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

更奇怪的是它有效......我把它全部写下来,就像我现在向你呈现的方式一样,很高兴看到它运作得很好。那是今天早些时候。现在大约一个小时前我再次尝试了它,由于某种原因它停止了工作。我真的不记得改变了什么。

修改

谢谢大家。我弄明白了,事实证明我犯了一个愚蠢的错误。它今天早些时候工作,因为所有用户都设置了他们的位置。现在,我有一些用户并没有这样做,而在经过它们时,经度和纬度变得空洞。

2 个答案:

答案 0 :(得分:3)

从您的错误消息中看来$latitude$longitude不包含任何值。您可能想要检查$start是否已正确设置。这是我可以帮助你的所有内容,因为我不知道$start是什么以及你是如何获得的。

答案 1 :(得分:1)

if ((isset($start['latitude']))&&(isset($start['longitude']))){
$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());

}else
{
echo "error";
}

在查询

中将$ latitude,$ latitude放入{}
$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";