Rails LIKE查询不起作用

时间:2014-04-03 17:54:23

标签: ruby-on-rails

这样可以正常工作,并返回正确的结果:

query = params[:query].downcase
users = User.find(:all, :conditions => ['username LIKE ?', "%#{query}%"])

但是,我认为这是不安全的,因为它对SQL注入攻击持开放态度?

所以我试图这样做:

users = User.all(:conditions => ["username LIKE ?", query])

甚至

users = User.where("username LIKE ?", query)

但这两个都没有返回任何结果。

这样做的正确方法是什么?

修改 这有效:

users = User.where("username LIKE ?", "%#{query}%")

但根据Rails文档:

enter image description here

1 个答案:

答案 0 :(得分:4)

您在查询的替代尝试中缺少百分比符号:

query = "%thing_to_find%"
users = User.all(:conditions => ["username LIKE ?", query])

-OR -

query = "%thing_to_find%"
users = User.where("username LIKE ?", query)

但话虽如此,你的第一个例子是安全的SQL注入。事实上,你的所有三个例子都是AOK!