ActiveRecord::Base.connection.execute(
"WITH numberofdays AS
(SELECT percent_change FROM asset_histories
WHERE date < $1
AND asset_symbol = $2
ORDER BY date DESC
LIMIT $3)
SELECT stddev_samp(percent_change) as stdev FROM numberofdays",
[day,symbol,daystolimit])
其中 day、symbol 和 daystolimit 是在上述代码之前分配的变量。它们是这样分配的:
day = '2013-03-25'
symbol = 'AAPL'
daystolimit = 20
我不想使用#{variable}
,因为可能存在恶意。如标题所述,我的声明正在返回
PGError ERROR: there is no parameter $1 LINE 1 ... WHERE date <$1 AND...
使用 Postgresql 9.2 和 rails 3.2
编辑添加我在这里找到的替代解决方案:
除了 mu 在他使用 connection.method(:quote) 的地方太短之外,我找不到关于它的文档,所以我遇到了另一篇这样引用的帖子:
a = ActiveRecord::Base.connection
a.execute(%Q{SELECT * FROM table WHERE id = #{a.quote(variable)}...})