【发布时间】:2016-05-18 13:09:45
【问题描述】:
好的,我有一个使用字符串插值的 SQL 请求并且运行良好:
ActiveRecord::Base.connection.execute("UPDATE my_table SET location = ST_SetSRID(ST_MakePoint('#{my_table.longitude}'::numeric, '#{my_table.latitude}'::numeric), 4326)::geography WHERE id=#{id}")
我想做的是使用 SQL 变量而不是字符串插值(出于安全原因(SQL 注入)),但我的查询遇到了一些麻烦:
ActiveRecord::Base.connection.execute("UPDATE my_table SET location = ST_SetSRID(ST_MakePoint(':longitude'::numeric, ':latitude'::numeric), 4326)::geography WHERE id=#{id}", longitude: my_table.longitude, latitude: my_table.latitude)
我得到的错误是:
PG::InvalidTextRepresentation:错误:类型的输入语法无效 numeric: ":longitude" (ActiveRecord::StatementInvalid)
有没有办法在最后一个查询中正确使用 SQL 变量?
【问题讨论】:
标签: sql ruby-on-rails database postgresql