用户有一个搜索框。
我需要给他灵活性,所以他可以像客户端一样进行搜索,而sql就是这样
名称like '%client%'
问题是我不想让用户使用%
或_ wildcards.
进行搜索
我知道我可以逃脱它们..但是有没有为任何通配符/或其他解决方案执行此操作的功能?
答案 0 :(得分:1)
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$$);
quote_like ---------------------- foo\%bar\\foo\_\_bar (1 row)
因此,您的查询应类似于:
select * from tablename where columnname like '%' || escape_like(?) || '%';
答案 1 :(得分:0)
在MySQL中,您可以使用PHP:
$text_escaped = addcslashes($text, '%\\_');
我想这同样适用于PostgreSQL,但我记得在他们的邮件列表上读到一些你需要双重逃避反向斜杠以使其正常工作的东西,我不确定但是......
答案 2 :(得分:-1)
为什么不使用full text search?