Postgresql LIKE экранированные символы для php - PullRequest
2 голосов
/ 21 февраля 2011

У пользователя есть окно поиска. Мне нужно дать ему гибкость, чтобы он мог выполнять поиск, как клиент, и SQL для этого будет имя like '%client%'

Проблема в том, что я не хочу давать пользователю возможность поиска с помощью % или _ wildcards. Я знаю, что могу избежать их ... но есть ли функция, позволяющая сделать это для какого-либо подстановочного знака или другого решения?

Ответы [ 3 ]

1 голос
/ 21 февраля 2011
create or replace function escape_like(text)
  returns text language sql immutable strict as
$q$
  select regexp_replace($1, $$([\\%_])$$, $$\\\1$$, 'g')
$q$;

Попробуйте:

=> select escape_like($$foo%bar\foo__bar$$);
<i>      quote_like
----------------------
 foo\%bar\\foo\_\_bar
(1 row)</i>

Таким образом, ваш запрос должен выглядеть примерно так:

select * from tablename where columnname like '%' || escape_like(?) || '%';
0 голосов
/ 04 января 2012

В MySQL вы можете сделать это с помощью PHP:

$text_escaped = addcslashes($text, '%\\_');

Полагаю, то же самое относится и к PostgreSQL, но я помню, что читал что-то в их списке рассылки, что вам нужно дважды избегать обратной косой черты, чтобыэто работает правильно, я не уверен, хотя ...

0 голосов
/ 21 февраля 2011

Почему бы вам не использовать полнотекстовый поиск ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...