我想在某个列表中找到所有具有通用名称或内部名称的小部件query_list。我可以
# 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}")
现在我有几个问题:
- 关于 SQL 注入攻击,上述 find_by_sql 是否安全?好像可以把危险的东西放进去
query_list。- 怎么写
.find_by_sql(["SELECT * FROM widgets WHERE common_name IN ? OR internal_name IN ?", ["a","b","c"], ["a","b","c"] ]) - 如果它不安全,我们可以让它安全吗?
- 怎么写
- 如果没有必要,我宁愿不写原始 sql。我知道我们可以在 中写入
AND条件find,如在 中.find(:conditions=>{:internal_name => ['a','b','c'], :common_name => ['a','b','c']})。我们也可以OR用 find 写条件吗? - 怎么用
where?这与使用有什么不同find?