0
我想在特定列表中查找所有帶有共同名稱或內部名稱的小部件query_list
。我可以做通過查找,sql或其他方式安全查詢
# Consider query_list = ["a","b","c"]
qlist = '(' + query_list.join(",") + ')'
# this makes
widgets = Widget.find_by_sql("SELECT * FROM widgets
WHERE common_name IN #{qlist} OR internal_name IN #{qlist}")
現在我有幾個問題:
- 就是上面的find_by_sql安全有關SQL注入攻擊?看起來好像可以在
query_list
中發生危險的事情。- 寫作如何
.find_by_sql(["SELECT * FROM widgets WHERE common_name IN ? OR internal_name IN ?", ["a","b","c"], ["a","b","c"] ])
- 如果不安全,我們可以安全嗎?
- 寫作如何
- 如果我不需要,我寧願不寫原始的sql。我知道我們可以在
find
中編寫AND
條件,如.find(:conditions=>{:internal_name => ['a','b','c'], :common_name => ['a','b','c']})
。我們是否也可以使用find編寫OR
條件? - 如何使用
where
?這與使用find
有什麼不同?