【问题标题】:Question marks in direct SQL query直接 SQL 查询中的问号
【发布时间】:2013-02-13 21:37:57
【问题描述】:

对 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])

【问题讨论】:

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


    【解决方案1】:

    不幸的是,我认为没有更简单的方法可以利用联接。但至少有可重复使用的卫生助手。

    请参阅ActiveRecord::Base#sanitize_sql (docs)。

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

    【讨论】:

      【解决方案2】:

      你为什么不试试这个:

      执行(

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

      SQL

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 2021-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-18
        相关资源
        最近更新 更多