【发布时间】:2012-07-20 14:53:53
【问题描述】:
在 MYSQL 数据库中搜索 Rails 2.3.14 应用程序时,我需要适当地转义搜索字符串,以便搜索包含单引号(撇号)的字符串。最好的方法是什么?我正在使用mysql gem,以防万一。
【问题讨论】:
标签: mysql ruby-on-rails escaping
在 MYSQL 数据库中搜索 Rails 2.3.14 应用程序时,我需要适当地转义搜索字符串,以便搜索包含单引号(撇号)的字符串。最好的方法是什么?我正在使用mysql gem,以防万一。
【问题讨论】:
标签: mysql ruby-on-rails escaping
Rails quotes strings 如下:
# Quotes a string, escaping any ' (single quote) and \ (backslash) characters.
def quote_string(s)
s.gsub(/\\/, '\&\&').gsub(/'/, "''") # ' (for ruby-mode)
end
【讨论】:
当使用mysql gem 时,您将获得Mysql.escape_string() 方法。使用如下:
search_terms = Mysql.escape_string("it's working!")
conditions = [ "table1.name LIKE '%#{search_terms}%'" ]
# use conditions for MYSQL query as appropriate
【讨论】:
您可以使用 ActiveRecord 的 quote 方法(例如 ActiveRecord::Base.connection.quote("string with ' apostrophe")),但 ActiveRecord 的查询方法已经为您转义了 SQL。例如:
a = "string with ' apostrophe"
ModelName.where("field1 = ?", a)
将“带有'撇号的字符串”更改为“带有''撇号的字符串”
【讨论】:
like 查询。 scope :like, -> (filter) { where("namespace like ? OR resource like ? OR owner like ?", some_strings)}。如果% 没有被转义,那么我猜用户可以执行有趣的查询。