1

我需要接收一个类似的值数组:

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

我想采用哪种方法来确保当我使用它时:

SELECT * FROM places WHERE type IN (array_joined_with_commas_and_quotes)

我没有受到注射攻击。

我正在编写没有任何库的句子,并且我在 Rails 中工作。

我没有 Active Record,我正在对外部服务器进行 postgis 查询。

4

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 回答