0

これが私のクエリです:

select * 
  from (select *, 3956 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(45.5200077 - lat)/ 2), 2) + COS(RADIANS(45.5200077)) * COS(RADIANS(lat)) * POWER(SIN(RADIANS(-122.6942014 - lng)/2),2))) AS distance 
          from stops 
      order by distance, route asc) as p 
group by route, dir 
order by distance asc 
   limit 10

これは、コマンド ラインと PHPMyAdmin で正常に機能します。JavaScript バックエンド経由でDbslayerを使用して MySQL に接続していますが、リクエストで 1064 エラーが返されます。

エンコードされた DBSlayer リクエスト文字列は次のとおりです。

http://localhost:9090/db ?{%22SQL%22:%22select%20*%20from%20%28select%20*,%203956%20*%202%20*%20ASIN%28SQRT%28POWER%28SIN% 28RADIANS%2845.5200077%20-%20lat%29/%202%29,%202%29%20+%20COS%28RADIANS%2845.5200077%29%29%20*%20COS%28RADIANS%28lat%29%29%20*% 20POWER%28SIN%28RADIANS%28-122.6942014%20-%20lng%29/2%29,2%29%29%29%20AS%20distance%20from%20%60stops%60%20order%20by%20%60distance%60 ,%20%60route%60%20asc%29%20as%20p%20group%20by%20%60route%60,%20%60dir%60%20order%20by%20%60distance%60%20asc%20limit%2010%22 }

そして応答:

{"MYSQL_ERRNO" : 1064 , "MYSQL_ERROR" : "SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。near '(RADIANS(45.5200077)) * COS(RADIANS( lat)) * POWER(SIN(RADIANS(-122.6942014 - lng' at line 1" , "SERVER" : "trimet"}

ありがとう!

4

2 に答える 2

0

問題の直接的な原因として考えられるのは、URL エンコーディングです。プラス演算子がそのまま送信されていることがわかります。従来のエンコーディングでは スペース+を意味していたため、これは危険です。http://www.faqs.org/rfcs/rfc1738

于 2010-02-02T15:52:00.700 に答える
0
...distance%60%20asc%20...

どのようにSQLをエスケープしていますか? 「ルート」が抜けているように見えるので、上記は「距離、昇順」と読みます。そこから下り坂のようです。

于 2010-02-02T15:37:16.287 に答える