1

我能够在 Rails 2.3 中进行 LIKE 查询的唯一方法如下:

access_points.all(:conditions => "mac_address LIKE '%#{@q}%'")

官方文档说这种方式是不安全的,因为会受到 SQL 注入的影响:

将您自己的条件构建为纯字符串可能会使您容易受到 SQL 注入攻击。例如,Client.first(:conditions => "name LIKE '%#{params[:name]}%'") 是不安全的。有关使用数组处理条件的首选方法,请参阅下一节。 http://guides.rubyonrails.org/v2.3.8/active_record_querying.html

但不幸的是,它没有解释如何正确地进行 LIKE 查询,而且我无法在 google 上找到它,因为 LIKE 是一个通用的关键字。

有什么提示吗?我是 Rails 新手,但我有 Symfony 和 Django 的经验。

4

2 回答 2

9

这就是你想要的方式:

:conditions => ['mac_address LIKE ?', "%#{@q}%"]
于 2012-06-06T14:50:55.630 回答
1

奥斯卡是对的。一些解释。正如 Oscar 向您展示的那样,您必须使用 rails sql 查询过滤。所以你把“喜欢?” 在 sql 语句和外部放置您的搜索字符串(使用 ruby​​ 代码)。Rails 将接管并正确清理搜索字符串。

还要记住,如果您正在查询 Postgres,它默认为区分大小写的查询,但也有不区分大小写的 ilike。这让我有几次。

于 2012-06-06T14:58:57.133 回答