当我尝试在details
表中查找数组列Linux
中存在operating_systems
的所有记录时。
查询select * from details where 'Linux' = ANY(operating_systems);
完美无缺,并返回Linux
列中operating_systems
的所有记录。
但是,如果我想获取I don't know
中operating_systems
所在的所有记录,我将无法形成正确的查询。
查询select * from details where 'I don\'t know' = ANY(operating_systems);
不会转义单引号并从字面上理解,导致查询不完整。
答案 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);
有效。