【问题标题】:How to handle single quotes in Postgresql query [duplicate]如何处理 Postgresql 查询中的单引号 [重复]
【发布时间】:2015-06-24 05:42:30
【问题描述】:

当我试图在details 表中查找数组列operating_systems 中存在Linux 的所有记录时。

查询select * from details where 'Linux' = ANY(operating_systems); 完美运行并返回operating_systems 列中包含Linux 的所有记录。

但是,如果我想获取 I don't know 存在于 operating_systems 中的所有记录,我无法形成正确的查询。

查询select * from details where 'I don\'t know' = ANY(operating_systems); 不会转义单引号并按字面意思理解,导致查询不完整。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    发现单引号可以通过在其前添加另一个单引号来进行转义。所以select count(*) from details where 'I don''t know' = ANY(operating_systems); 有效。

    这对于即席查询或数据文字被硬编码的查询是可以接受的。

    如果字符串来自应用程序用户,则绝对不行。不要这样做。请参阅http://bobby-tables.com/ 了解原因。

    使用参数化查询(通常被错误地称为准备好的语句,尽管它们并不完全相同)。具体如何做到这一点取决于您的编程语言和客户端,您没有提到,但它通常涉及“准备”一条语句,然后使用参数执行它。

    【讨论】:

      【解决方案2】:

      发现单引号可以通过在其前添加另一个单引号来进行转义。所以select count(*) from details where 'I don''t know' = ANY(operating_systems); 有效。

      猜你喜欢
      • 2011-04-27
      • 2010-09-06
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多