我需要接收一个类似的值数组:
['restaurant']
['restaurant', 'pharmacy']
我想采用哪种方法来确保当我使用它时:
SELECT * FROM places WHERE type IN (array_joined_with_commas_and_quotes)
我没有受到注射攻击。
我正在编写没有任何库的句子,并且我在 Rails 中工作。
我没有 Active Record,我正在对外部服务器进行 postgis 查询。
我需要接收一个类似的值数组:
['restaurant']
['restaurant', 'pharmacy']
我想采用哪种方法来确保当我使用它时:
SELECT * FROM places WHERE type IN (array_joined_with_commas_and_quotes)
我没有受到注射攻击。
我正在编写没有任何库的句子,并且我在 Rails 中工作。
我没有 Active Record,我正在对外部服务器进行 postgis 查询。
您有两种基本方法(在这些示例中使用 ? 进行参数化)。
如果这是一个数组,那么你['restaurant', 'pharmacy']
就变成了'{"restaurant","pharmacy"}'
,然后你可以:
SELECT * FROM places WHERE type = ANY (?);
你也可以
SELECT * FROM places WHERE type IN (? ....);
随时动态生成参数数量。正如烤饼所提到的,ActiveRecord 可能能够为您自动执行此操作。关键是这些方法与查询分开发送数据,这意味着 SQL 不能注入到查询中。
使用 ActiveRecord 函数进行查询构建怎么样?如果您使用导轨,宝石应该仍然存在。
Place.where(:type => ['foo', 'bar']).to_sql