Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP运行类似PostgreSQL的查询_Php_Postgresql_Escaping_Sql Like - Fatal编程技术网

如何使用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
不是您想要执行的操作的正确操作符。太好了!非常感谢你!