1

次のような値の配列を受け取る必要があります。

['restaurant']
['restaurant', 'pharmacy']

これを使用するときに、次のことを確実にするためにどのアプローチを取るかを希望します。

SELECT * FROM places WHERE type IN (array_joined_with_commas_and_quotes)

インジェクション攻撃を受けない。

私はライブラリなしで文章を書いており、Rails で作業しています。

私は Active Record を持っていません。外部サーバーに対して postgis クエリを実行しています。

4

2 に答える 2

2

2 つの基本的なアプローチがあります (これらの例では、パラメーター化に ? を使用しています)。

これが配列の場合、次のように['restaurant', 'pharmacy']なり'{"restaurant","pharmacy"}'、次のことができます。

SELECT * FROM places WHERE type = ANY (?);

あなたもできる

SELECT * FROM places WHERE type IN (? ....);

パラメーターの数を動的に生成します。スコーンが述べたように、ActiveRecord はこれを自動化できるかもしれません。ポイントは、これらのメソッドがクエリとは別にデータを送信することです。つまり、SQL をクエリに挿入することはできません。

于 2013-03-23T04:10:45.190 に答える
2

クエリの構築に ActiveRecord 関数を使用するのはどうですか? レールを使用している場合、宝石はまだそこにあるはずです。

Place.where(:type => ['foo', 'bar']).to_sql
于 2013-03-23T02:01:12.750 に答える