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
有什么不同?