【问题标题】:How to search for fields with single quotes from a postgres db?如何从 postgres 数据库中搜索带单引号的字段?
【发布时间】:2012-05-19 16:44:42
【问题描述】:

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

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%' 

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

【问题讨论】:

    标签: php database postgresql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我相信在 9.1 中它甚至不会工作,因为它默认为 standard_conforming_strings = true
      • 问题已经表明他正在使用 E'...' 语法,所以 \' 可以正常工作。你同样可以使用 '' 而不是 \',无论你的船是什么。
      猜你喜欢
      • 2011-04-25
      • 2020-11-02
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 2014-10-19
      • 1970-01-01
      相关资源
      最近更新 更多