如何处理 Postgresql 查询中的单引号 [重复]

Posted

技术标签:

【中文标题】如何处理 Postgresql 查询中的单引号 [重复]【英文标题】:How to handle single quotes in Postgresql query [duplicate] 【发布时间】: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); 不会转义单引号并按字面意思理解,导致查询不完整。

【问题讨论】:

【参考方案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); 有效。

【讨论】:

postgresql.org/docs/current/static/…

以上是关于如何处理 Postgresql 查询中的单引号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

处理plsql中的单引号

如何处理 ExpandableListView 中的单选按钮?

如何处理C#中引号内的引号?

bash 如何处理嵌套引号? [复制]

如何处理keras的单输出多重损失?

sql PostgreSQL:如何处理表和视图依赖项