我的班级User
有hstore
属性:preferences
。如果我想查找其偏好设置为startpage
nil
的所有用户,我可以这样做:
User.where("preferences @> 'startpage=>NULL'")
如何构造该查询以避免SQL查询注入?
试过:
User.where("preferences @> :key '=>NULL'", key: 'startpage')
User.where("preferences @> :key IS 'NULL'", key: 'startpage')
User.where("preferences @> :key IS NULL", key: 'startpage')
User.where("preferences @> ? IS NULL", 'startpage')
没有运气。有谁知道怎么做?
答案 0 :(得分:1)
@>
运营商期望双方都有hstores。当你说:
some_hstore @> 'startpage=>NULL'
PostgreSQL将隐式添加::hstore
演员,就像你说的那样:
some_hstore @> 'startpage=>NULL'::hstore
但是还有其他方法可以创建一个hstore。来自fine manual:
功能:
hstore(text, text)
退货类型:hstore
描述:制作单项hstore
所以你可以切换到更明确的hstore(text, text)
函数,让ActiveRecord用占位符和字符串做正常的事情:
User.where("preferences @> hstore(:key, null)", :key => 'start page')