2016-06-19 11 views
0

Postgresデータベースの配列フィールドに対してwhereクエリを実行する際に問題が発生しています。
私のレールアプリでは、Peopleというテーブルがあります。この中の1列はpetsと呼ばれます。この列には配列の値が含まれています:Rails:ストアドアレイに対する安全なクエリ

たとえば、ペットの犬を持つすべての人を返すクエリを実行したいと思います。

ソリューションアイブは、これまでのところ、そのような

checkedPetが可変であり、「犬」や他の動物かもしれない
People.where("\"pets\" @> '{\"" + checkedPet + "\"}'") 

ように見えるを使用して。

これは動作しますが、私はSQLインジェクションの問題に対して脆弱だと感じていますか?
これはケースですか?もしそうなら、より良い、より安全な解決策は何ですか?

答えて

1

ActiveRecord and PostgreSQL guideによると、次の操作を実行できます。

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

または私が探していたまさにです

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

!ありがとうございます!!! 小さな変化が1つありますが、後は​​必要ですか? ものに変更し、それを People.where(「=任意の( 『ペット』)?」、checkedPet)のように、私は正しいと おかげで再び –

+0

@BenEastonマークします:私はと思っていませんでし – potashin

+0

)ええ、それはタイプミスだが2番目の方法はSQLインジェクションの問題を防ぐでしょうか? –

関連する問題