Синтаксическая ошибка в запросе SQL. Не удалось найти ошибку

0

Я пишу тесты для своей базы данных в mysql.

con.query("SELECT  'list'.* FROM 'list'  WHERE 'list'.'place' = 86 AND 'list'.'person' = \"#{person_id}\" AND (( (list.state = 'open' AND num=\"#{num}\") || (list.state = ?) )) AND (list.updated_at > \"2018-06-05\") ORDER BY list.person, list.state='closed' DESC, list.updated_at DESC LIMIT 50 OFFSET 1")

list - таблица, а num, place и person - значения одного элемента из списка. Я также использую это в рубиновом скрипте.

Я получаю синтаксическую ошибку. Сообщение об ошибке:

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 ''?) )) AND (list.update_at > "2018-06-05")) ORDER BY list.person, or'

Я не могу понять эту проблему. Пожалуйста, помогите мне.

  • 1
    Всегда, всегда используйте значения заполнителя для данных. Видеть такие вещи, как #{num} в вашем запросе, крайне важно, именно так вы получаете ошибки SQL-инъекций и все ужасные проблемы, которые с этим связаны. Вы используете заполнитель для некоторых значений (например, list.state ), но вы должны использовать заполнители для всех значений. Кажется, проблема в том, что вы не используете правильный метод для выполнения этого запроса, так как query не поддерживает значения заполнителей, поэтому вам нужно найти метод, который это делает.
  • 0
    Какой драйвер Ruby для MySQL вы используете? Если вы используете низкоуровневый драйвер, такой как gem mysql2 , он очень ограничен и труден в использовании. Вместо этого используйте слой, такой как ActiveRecord или Sequel, который помогает абстрагироваться от некоторых из этих низкоуровневых проблем.
Показать ещё 1 комментарий
Теги:

2 ответа

2

Посмотрите на часть запроса ORDER BY

ORDER BY list.person, list.state='closed' DESC, list.updated_at DESC 

list.state не должен иметь a = 'closed'

Просто попробуйте изменить все это на

ORDER BY list.person, list.state DESC, list.updated_at DESC
-1

Я думаю, что вы используете неправильный символ для двойных кавычек. У вас есть " Попробуйте ".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню