2011-07-19 35 views
0

我有一個自定義的SQL查詢我想運行,但用戶可以向下值日期之前和日期分別經過從列表中選擇降<或>。在該系統的日期目前SQL是這樣的:Rails的SQL參數化與< >

searchSQL += " AND a.date_acquired #{params[:asset][:date_range]} '#{params[:asset][:date_acquired]}'" 

當第一個是<或>符號從HTML過去了,假如我跟

[searchSQL,value1,value2] 

在消毒此最後,我如何確保<或>可以不用搞亂SQL查詢?

回答

0

簡短的回答:不能。至少在你想的方面。

較長的答案: 你必須給操作員從選擇菜單中選擇轉換成真正的SQL操作:

def sql_operator_from_param(operation) 
    return operation if ['<', '>', '='].include?(operation) 
    raise "unknown operation" 
end 

然後使用您的SQL語句來代替params哈希表的。

一種更好的方式,這將避免解碼字符串文字將索引值分配給您的選擇菜單,然後你就可以用它來索引到字符串數組保存的運營商。

+0

謝謝,我帶你使用數組的建議,我認爲它很聰明。這樣,如果有人試圖在這個字段上注入SQL,它會在數組上拋出一個錯誤,而不是在SQL查詢上。 –

相關問題