直接SQL查询中的问号

时间:2013-02-13 21:37:57

标签: ruby-on-rails postgresql inner-join rails-activerecord

对ActiveRecord感到失望,它产生低效或错误的DELETE查询,我正在寻找一种能够以安全的方式执行直接SQL查询的能力,没有SQL注入的可能性。

我知道WHERE子句有一个安全的变体:

MyObject.joins(:details)
.where('my_objects.my_value = ? and details.my_id = ?',
params[:value], params[:id])

execute的安全变体是否存在?类似的东西:

execute(<<eos
DELETE FROM my_objects
USING details
WHERE
  my_objects.details_id = details.id
  AND my_objects.my_value = ?
  AND details.my_id = ?
eos
, params[:value], params[:id])

2 个答案:

答案 0 :(得分:1)

不幸的是,我认为有一种更简单的方法可以使用连接。但至少可以为这些条件提供可重复使用的卫生助手。

请参阅ActiveRecord::Base#sanitize_sqldocs)。

Model.send(:sanitize_sql, {:foo => "bar"})

答案 1 :(得分:-3)

为什么不试试这个:

执行(小于;&LT; -SQL

从my_objects中删除   使用细节   哪里     my_objects.details_id = details.id     AND my_objects.my_value =#{params [:value]}     AND details.my_id =#{params [:id]}

SQL