我在Postgres数据库中对数组字段执行where查询时遇到问题。
在我的rails应用程序中,我有一个名为People
的表。其中一列叫做pets
。现在这个列包含数组值,即:
["dog", "cat", "fish"]
我想执行一个查询,返回所有有宠物狗的人。
到目前为止,我一直在使用的解决方案看起来如此
People.where("\"pets\" @> '{\"" + checkedPet + "\"}'")
其中checkedPet
是一个变量,可能是“狗”或任何其他动物。
这有效,但我觉得容易受到SQL注入问题的影响? 是这样的吗?如果是这样,什么是更好,更安全的解决方案来避免它?
根据ActiveRecord and PostgreSQL guide,您可以执行以下操作:
People.where('? = any("pets")', checkedPet)
要么
People.where('"pets" @> ?', "{#{checkedPet}}")