0

次のSQLクエリは、PHPMyAdminで実行すると完全に正常に機能しますが、Webページから実行するとエラーが発生します。私はStackOverflowで同様の質問を探し、提案を試しましたが、残念ながら... Webページで機能しない理由を誰かが知っていますか?

変数が入力された後の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

さらに奇妙なのは、それが機能したことです...私は今あなたにそれを提示しているのと同じように、それをすべて書き留めました、そしてそれがうまく機能したのを見てうれしかったです。それは今日早くでした。1時間ほど前にもう一度試してみましたが、何らかの理由で機能しなくなりました。私は本当に物事を変えたことを覚えていません。

編集

みんな、ありがとう。私はそれを理解しました、そしてそれは私が愚かな間違いをしたことがわかりました。すべてのユーザーが場所を設定したため、今日は以前に機能しました。今、私はそれらをループしている間にそうしないユーザーが何人かいます。経度と緯度は空になりました。

4

2 に答える 2

3

エラーメッセージからは、値が含まれ$latitude$longitudeいないようです。$start正しく設定されていることを確認することをお勧めします。私はあなたがそれをどのように手に入れているのかわからないので、これが私があなたを助けることができるすべて$startです。

于 2012-09-23T23:59:03.260 に答える
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";
于 2012-09-24T00:09:01.020 に答える