适当的逃避LIKE条件

时间:2014-04-18 16:27:43

标签: sql ruby-on-rails activerecord arel sql-like

我想在我的SQL请求中使用LIKE。我构建了这样的东西:

streets = Street.where("name LIKE ?", "%#{params[:name]}%")

作为Rails指南中的mentioned。而且我认为这完全没问题。但是我遇到了以下麻烦:

如果我的用户在params[:name]中加上括号,我会发现错误。 params[:name] = '('的示例:

Street Load (3.5ms)  SELECT `streets`.* FROM `streets` WHERE (name LIKE '%(%')
Completed 500 Internal Server Error in 18ms

RegexpError (end pattern with unmatched parenthesis: /(/):

如果我在params[:name]中使用斜杠,我会发现错误。 params[:name] = "a\\p"的示例:

invalid multibyte character

我期望数组样式的请求可以转义所有特殊字符,但它没有!

我该如何正确逃避LIKE请求?

我正在使用Rails 3.2和ruby 1.9.3

P.S。我在2个月前发现了commit。所以Rails开发人员刚开始解决这个问题......所以它似乎只是外部解决方案(如某些宝石或一些黑客攻击)

0 个答案:

没有答案