Member 12016106 Ответов: 4

Как мне решить этот запрос mysql?


У меня есть поисковая система в моей системе. Когда я ищу с помощью специальных символов, таких как @-_.&усилитель;#() Это работает найти и я получаю результат но когда я использую специальный символ одинарной кавычки (') Я не получаю результата, но в моей БД есть данные, использующие одинарную кавычку.

Что я уже пробовал:

SELECT * FROM(SELECT p.PROJECT_ID, p.PROJECT_NAME, p.PHASE, p.STATUS, d.LOGIN_ID AS CREATED_BY,  p.LAST_UPDATED_DATE 
FROM report.GEN_PROJECT p, report.GEN_USER_LOGIN d
WHERE  d.USER_ID = p.CREATED_BY) A 
WHERE  PROJECT_NAME
LIKE '%grammar's%'  ORDER BY PROJECT_NAME  LIMIT 10 OFFSET 0;
Ошибка: У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с порядком " s %" по имени проекта

4 Ответов

Рейтинг:
2

Patrice T

Поскольку одинарная кавычка является разделителем в строке sql, вы не можете использовать ее внутри строки, вам нужно ее экранировать.

LIKE '%grammar''s%' ORDER BY PROJECT_NAME LIMIT 10 OFFSET 0;


Member 12016106

Здесь я пытаюсь получить название проекта от Бина:

if(bean.getSearchBean()!=null&&StringUtils.isNotBlank(bean.getSearchBean().getProjectName())) {
conditionSQL = conditionSQL + (StringUtils.isNotBlank(conditionSQL)?" И ":"") + " PROJECT_NAME LIKE '%"+bean.getSearchBean().getProjectName()+"%'";
}

Так как же мне избежать этого здесь? Извините, что я нахожусь в процессе обучения. Я очень ценю вашу помощь.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 12016106

Проблема решена.. Спасибо

Patrice T

Пожалуйста.
Кстати, вы можете принять полезные решения, это закроет вопрос.

Рейтинг:
2

MadMyche

Как сказал Патрис, проблема заключается в том, что специальный символ одинарной кавычки используется для того, чтобы SQL знал, что вы имеете дело с определенными типами значений, такими как текст или даты.

Если вы используете IDE, предназначенную для операторов SQL, вы заметите, что Intellisense будет менять цвета при использовании одинарных кавычек, а также зарезервированных/специальных слов.
Это даже очевидно, когда вы размещаете код на этом форуме; если вы заметили, что ваш первоначальный вопрос был изменен SQL с полужирного на code-sql, стили показывают, где находится проблема.


Рейтинг:
2

Wendelius

Чтобы добавить предыдущие решения, похоже, что данные, используемые в условии, поступают из пользовательского интерфейса.

Если это так, вы должны использовать параметры. Одна вещь заключается в том, что таким образом вы избегаете риска SQL-инъекции, но также это избавляет вас от необходимости экранировать специальные символы.

Например, взгляните на MySqlCommand.свойства параметров[^]


Рейтинг:
2

Member 12016106

побег из одинарной кавычки с помощью \'