如何使用PHP运行类似PostgreSQL的查询
假设我想像这样运行查询:如何使用PHP运行类似PostgreSQL的查询,php,postgresql,escaping,sql-like,Php,Postgresql,Escaping,Sql Like,假设我想像这样运行查询: $q = "SELECT * FROM items WHERE name LIKE $1"; $r = pg_query_params($dbconn, $q, array("%" . $ss . "%")); 如果用户为$ss提供了字符串%或,则可能会出现问题。我如何告诉引擎不要在 $SS 中考虑 % >代码> ? 目前我的方法是 $q = "SELECT * FROM items WHERE name LIKE $1 ESCAPE '\'"; $r = pg_
$q = "SELECT * FROM items WHERE name LIKE $1";
$r = pg_query_params($dbconn, $q, array("%" . $ss . "%"));
如果用户为$ss
提供了字符串%
或
,则可能会出现问题。我如何告诉引擎不要在<代码> $SS <代码>中考虑<代码> %<代码> >代码> <代码>?
目前我的方法是
$q = "SELECT * FROM items WHERE name LIKE $1 ESCAPE '\'";
$r = pg_query_params($dbconn,
$q,
array("%" . str_replace("%", "\%", str_replace("_", "\_", $ss)) . "%"));
但是,如果转义字符(
\
)是字符串中的最后一个,那么附加的%
也将被转义。第一个建议是避免像这样的。只要做:
SELECT * FROM items WHERE position($1 in name) > 0;
那么你就不必担心特殊角色了
您可以使用转义
。但是您需要字符串中没有的内容,例如~
SELECT * FROM items WHERE name LIKE $1 ESCAPE '~'
然后在绑定参数时:
$r = pg_query_params($dbconn, $q,
array("%" . str_replace(str_replace($ss, "_", "~_"), "%", "~%") . "%"));
您可以通过将转义字符加倍来转义它。这只是另一个str_replace()
:
或者,使用LIKE
作为一项功能,让用户输入通配符,因为它们具有更强大的搜索功能。第一个建议是避免使用LIKE
。只要做:
SELECT * FROM items WHERE position($1 in name) > 0;
那么你就不必担心特殊角色了
您可以使用转义
。但是您需要字符串中没有的内容,例如~
SELECT * FROM items WHERE name LIKE $1 ESCAPE '~'
然后在绑定参数时:
$r = pg_query_params($dbconn, $q,
array("%" . str_replace(str_replace($ss, "_", "~_"), "%", "~%") . "%"));
您可以通过将转义字符加倍来转义它。这只是另一个str_replace()
:
或者,使用类似于
的功能,让用户输入通配符,因为它们具有更强大的搜索功能。任何字符都可以位于字符串中的任何位置,这是我的concerns@Yola . . . 我修改了答案。但仔细想想,第一个解决方案LIKE
不是您想要执行的操作的正确操作符。太好了!非常感谢你!任何字符都可以位于字符串中的任何位置,这是我的concerns@Yola . . . 我修改了答案。但仔细想想,第一个解决方案LIKE
不是您想要执行的操作的正确操作符。太好了!非常感谢你!