gpt4 book ai didi

php - 如何使用 PHP 运行 PostgreSQL LIKE 查询

转载 作者:行者123 更新时间:2023-11-29 14:17:45 24 4
gpt4 key购买 nike

假设我想像这样运行查询:

$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)) . "%"));

但是如果转义字符 (\) 是字符串中的最后一个字符,那么附加的 % 也会被转义。

最佳答案

第一个建议是避开 LIKE。只是做:

SELECT * FROM items WHERE position($1 in name) > 0;

那么你就不用担心特殊字符了。

您可以使用 ESCAPE 。 . .但是你需要一些不在字符串中的东西,比如 ~

SELECT * FROM items WHERE name LIKE $1 ESCAPE '~'

然后当你绑定(bind)参数时:

$r = pg_query_params($dbconn, $q,
array("%" . str_replace(str_replace($ss, "_", "~_"), "%", "~%") . "%"));

您可以通过将转义字符加倍来转义转义字符。那只是另一个 str_replace():

$r = pg_query_params($dbconn, $q,
array("%" . str_replace(str_replace(str_replace($ss, "~", "~~"), "_", "~_"), "%", "~%") . "%"));

或者,将 LIKE 的使用作为一个功能,让用户输入通配符,因为这样他们就有了更强大的搜索能力。

关于php - 如何使用 PHP 运行 PostgreSQL LIKE 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42469789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com