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

问题描述 投票:0回答:1

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

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

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

到目前为止,我一直在使用的解决方案看起来如此

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

其中checkedPet是一个变量,可能是“狗”或任何其他动物。

这有效,但我觉得容易受到SQL注入问题的影响? 是这样的吗?如果是这样,什么是更好,更安全的解决方案来避免它?

sql ruby-on-rails arrays postgresql activerecord
1个回答
1
投票

根据ActiveRecord and PostgreSQL guide,您可以执行以下操作:

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

要么

People.where('"pets" @> ?', "{#{checkedPet}}")
© www.soinside.com 2019 - 2024. All rights reserved.