3

我有一个可能包含单引号的字段,它与单引号一起存储在数据库中。例如,字段可能是这样的。

1|xyz的朋友|21.3

2|你好,tty的朋友|42.2

用户输入需要显示值的搜索查询。

例如,如果用户输入--> xyz's 存储在变量中(PHP)

我做不到

select * from table where field LIKE '%variable%' 

因为变量中已经有引号。并且 postgres 不允许我在 %variable% 周围使用双引号

我也试过做这样的事情

select * from table where field LIKE E'%variable%' 

使用转义序列,但这也不起作用。有什么帮助吗?

4

2 回答 2

8

不要试图自己引用东西,使用图书馆。在这种情况下,您需要pg_escape_string. 因此,添加百分比包装器,然后将其提供给pg_escape_string然后将结果放入您的 SQL 中。

顺便说一句,在 PostgreSQL 字符串文字中转义单引号的正确方法是将它加倍,如果你有"it's"一个字符串,那么数据库希望'it''s'在 SQL 中看到。

于 2012-05-11T04:43:05.727 回答
0

您必须使用 \ 转义引号字符,例如

select * from table where field LIKE E'%xyz\'s%'

在使用它之前,您应该能够将字符串中的 ' 替换为 \' 。

另请注意,在查询中直接使用用户输入的查询参数通常是一个非常糟糕的主意。PHP 可能有一个模块可以为您清理输入;你应该使用它。

于 2012-05-11T04:24:19.720 回答