Как я могу выйти из квадратных скобок в операторе LIKE?

Security Warning: этот ответ не соответствует лучшим рекомендациям по безопасности. Эвакуация неадекватна для предотвращения SQL-инъекции , вместо этого используйте подготовленные операторы . Используйте стратегию, изложенную ниже, на свой страх и риск. (Кроме того, mysql_real_escape_string() был удален в PHP 7.)

Вы могли бы сделать что-то основное:

$safe_variable = mysql_real_escape_string($_POST["user-input"]);
mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

Это не решит каждую проблему, но это очень хороший ступень. Я оставил очевидные элементы, такие как проверка существования переменной, числа (числа, буквы и т. Д.).

222
задан Martin Smith 31 October 2012 в 10:51
поделиться

4 ответа

LIKE 'WC[[]R]S123456' 

или

LIKE 'WC\[R]S123456' ESCAPE '\'

Должен работать.

310
ответ дан Otávio Décio 23 November 2019 в 04:01
поделиться

Вот то, что я на самом деле использовал:

like 'WC![R]S123456' ESCAPE '!'
18
ответ дан Jason Plank 23 November 2019 в 04:01
поделиться

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

Вот хорошая статья еще с некоторыми примерами

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
13
ответ дан Jeff Atwood 23 November 2019 в 04:01
поделиться

Мне нужно было исключить имена, начинающиеся с символа подчеркивания, из запроса, поэтому я закончил так:

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character
27
ответ дан 23 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: