MySQL: что означает «escape»! »По запросу - PullRequest
0 голосов
/ 12 июля 2019

Редактирование чужого кода нашло этот запрос:

SELECT c.name AS category_name,
       p.id,
       p.name,
       p.description,
       p.price,
       p.category_id,
       p.created
FROM   products p
       LEFT JOIN categories c
              ON p.category_id = c.id
WHERE  p.name LIKE '%keyword%' escape '!'
        OR p.description LIKE '%keyword%' escape '!'
ORDER  BY p.name ASC
LIMIT  0, 6

Я понимаю все, кроме escape '!' в строках 11 и 12. Я думаю, это что-то, связанное с «побегом» и, в случаеНе знаете, лучше ли реализовать его перед запросом (кодовым суппортом является PHP) или передать задание на механизм БД (и что означает символ '!'?).

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Ключевое слово ESCAPE используется для экранирования символов сопоставления с образцом, таких как процент (%) и подчеркивание (_), если они составляют часть данных.

Предположим, что мы хотим проверить строку "67% "мы можем использовать;

LIKE '67#%%' ESCAPE '#';

Если мы хотим найти фильм" 67% виновных ", мы можем использовать приведенный ниже сценарий, чтобы сделать это.

SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';

Обратите внимание на двойное «%%» в предложении LIKE, первое в красном «%» рассматривается как часть строки, которую нужно найти.Другой используется для соответствия любому количеству следующих символов.

Тот же запрос также будет работать, если мы используем что-то вроде

SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
1 голос
/ 12 июля 2019

Вам не нужно экранировать в этом конкретном запросе, но если вы когда-либо сделаете (например, если в вашем поисковом символе есть символ%), вам понадобится экранирующий символ, чтобы различать%, который является частью вашего поискового запроса, и другие символы%, которые используются в качестве заполнителя в аналогичной части запроса.

В этом случае вы экранируете% в поисковом запросе символом, который вы определили с помощью ключевого слова escape.

Например, скажем, вы хотите найти строку 25% в поле имени. Вы пойдете так:

WHERE  p.name LIKE '%25!%%' escape '!'
...