在使用Ruby在Rails上执行SQL命令时面对问题



在我的控制器中,我有此方法:

def show
    @final =final_params
    allparams=''
    ActiveRecord::Base.connection.execute("USE database")
    ActiveRecord::Base.connection.execute("declare @p3 dbo.Params")
    @final.each do |key, value|
      allparams= "insert into @p3 values(N'""#{key}"+"'"++",N'"+"#{value}"+"')n"
      ActiveRecord::Base.connection.execute(allparams)
    end
  end

但是,我面临以下错误:

TinyTds::Error: Must declare the table variable "@p3".: insert into @p3 values(N'a',N'aa')

在我的上面代码中@p3是表名称参数。

我正在使用SQL Server用于数据库。

#{@p3},但此代码看起来像是SQL输入的攻击。

您需要将@p3变量插入分配给allparams的SQL字符串中,例如:

@final.each do |key, value|
  allparams = "insert into #{@p3} values(N'""#{key}"+"'"++",N'"+"#{value}"+"')n"
  ActiveRecord::Base.connection.execute(allparams)
end