Rails:针对存储数组的安全查询

问题描述:

我在执行对我的Postgres数据库中的数组字段的where查询时遇到问题。
在我的Rails应用程序中,我有一个名为People的表格。其中的一列称为pets。现在这个列包含数组值,即:Rails:针对存储数组的安全查询

["dog", "cat", "fish"] 

我想执行一个查询,返回所有有宠物狗的人例如。

一直使用IVE到目前为止的溶液看起来这样

People.where("\"pets\" @> '{\"" + checkedPet + "\"}'") 

其中checkedPet是可变的,并且可以是“狗”或任何其他动物。

这工作,但我觉得很容易受到SQL注入的问题?
这是这种情况?如果是的话,什么是避免它的更好和更安全的解决方案?

根据ActiveRecord and PostgreSQL guide,你可以做到以下几点:

People.where('? = any("pets")', checkedPet) 

或者

People.where('"pets" @> ?', "{#{checkedPet}}") 
+0

这正是我一直在寻找!非常感谢!!! 但是,一个微小的变化,你需要一个=后? 作为People.where 其更改为,我会标记为正确 再次感谢 –

+0

@BenEaston(,checkedPet“=任何(‘宠物’)?”):是啊,这是一个错字) – potashin

+0

我不认为第二种方法可以防止SQL注入问题呢? –