MySQL 1064 ошибка, работает в командной строке и phpmyadmin; не в приложении
-
25-09-2019 - |
Вопрос
Вот мой запрос:
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. я использую Dbslayer. Для подключения к MySQL через мой JavaScript Backend, и запрос возвращает ошибку 1064.
Вот кодированная строка запроса DBSLayer:
http: // localhost: 9090 / дБ? {% 22sql% 22:% 22SQLECT% 20 *% 20 с% 20% 28 *% 20 *,% 203956% 20 *,% 203956% 20 *% 202% 20 *% 20asin% 28sqrt% 28 *% 28sin% 28radians% 2845.5200077% 20-10л. 29 /% 202% 29,% 202% 29% 20 +% 20COS% 28radians% 2945.5200077% 29% 29% 20 *% 20COS% 28RADIANS% 28LAT% 29% 29% 20 *% 20 вещей% 28SIN% 28radians% 28-122.6942014 % 20-10LNG% 29/2% 29,2% 29% 29% 29% 20as% 29% 29% 29% 20as% 20.10stance% 20% 20% 60Stoors% 60% 2045% 20Ба 30% 20% 60 Расходности% 60,% 20% 60Route% 60% 20as % 29% 20as% 20p% 20group% 20BY% 20% 60Route% 60,% 20% 60DIR% 60% 2045545% 20Ба% 20% 60 Расходности% 60% 20asc% 20limit% 2010% 22}
И ответ:
{«MySQL_ERRNO»: 1064, «MySQL_ERROR»: «У вас есть ошибка в синтаксисе SQL; Проверьте руководство, которое соответствует вашей версии MySQL Server для правильного синтаксиса для использования рядом '(Radians (45.5200077)) * COS (Radians ( LAT)) * POWER (SIN (RADIANS (-122.6942014 - СПГ »на линии 1", "Сервер": "Timet"}
Спасибо!
Решение
Возможный немедленный источник вашей проблемы - кодировка URL. Я вижу, что оператор Plus передается как есть. Это опасно, потому что +
раньше имел в виду пространство в традиционном кодировке. http://www.faqs.org/rfcs/rfc1738.
Другие советы
...distance%60%20asc%20...
Как вы избежаете SQL? Похоже, тебе не хватает «маршрут», поэтому вышесказанное чтение «расстояние, ASC». Похоже, это уходит вниз оттуда.