如何在Postgresql查询中处理单引号

时间:2015-04-17 11:35:29

标签: postgresql

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

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

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

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

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

答案 1 :(得分:0)

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