如何使用postgres db中的单引号搜索字段?

时间:2012-05-11 04:18:19

标签: php database postgresql

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

1 | xyz的朋友| 21.3

2 |你好,tty的朋友| 42.2

用户输入搜索查询,根据该搜索查询需要显示值。

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

我无法做到

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

因为变量已经有引号。和postgres不允许我在%变量%

周围使用双引号

我也尝试过这样的事情

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

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

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

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

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

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

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