Как получить оператор SQL для поиска знака процента? - PullRequest
1 голос
/ 05 января 2012

У меня есть SQL-оператор, который выполняет поиск в моей базе данных

"SELECT catelogue.ARTIST, catelogue.TITLE, catelogue.`CAT NO.`, 
catelogue.FORMAT,catelogue.`IMAGE PATH` 
FROM catelogue 
WHERE catelogue.TITLE LIKE '%$search%'"

Теперь я понимаю в SQL-файле, что ваш процент - это ваш шаблон, но теперь мне нужен поиск для поиска 100% Summer, потому что это заголовок

Есть ли способ сделать это так, чтобы знак процента не влиял на мои другие символы подстановки?

РЕДАКТИРОВАТЬ:

Так что, если я использую это

$search = addcslashes(mysql_real_escape_string($search), '%_');

Есть ли необходимость в замене preg

$search = preg_replace("/[^a-zA-Z 0-9\/\\+\.,:?-]+/", "", $search)

И можно ли заменить preg в сочетании с mysql_real_escape_string?

Ответы [ 4 ]

3 голосов
/ 05 января 2012

\% - экранированный символ «%».

Отредактировано

PHP:

$search = "100\% Summer";

общего пользования string addcslashes ( string $str , string $charlist ):

$search = "100% Summer";
$search = addcslashes($search, '%_');

Не забудьте использовать string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] ) для предотвращения внедрения SQL. Таким образом, окончательный код может выглядеть так:

$search = "100% Summer";
$search = addcslashes(mysql_real_escape_string($search), '%_');
2 голосов
/ 05 января 2012

Вы можете экранировать символы подстановки, используя \, например,
str_replace(array('%', '_'), array('\%', '\_'), $subject).

См. http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like.

1 голос
/ 05 января 2012
SELECT catelogue.ARTIST, catelogue.TITLE, catelogue.`CAT NO.`, 
catelogue.FORMAT,catelogue.`IMAGE PATH` 
FROM catelogue 
WHERE catelogue.TITLE LIKE '%100\% Summer%';
0 голосов
/ 05 января 2012

Вы можете экранировать знак процента с помощью обратной косой черты

$search = str_replace('%', '\%', $search);

...

WHERE catelogue.TITLE LIKE '%$search%'

Кстати, если ваш $search поступает из пользовательского ввода, то ваш код уязвим для SQL-инъекции .

...