如何处理 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 查询中的单引号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章