2012-07-20 44 views
5

當在MYSQL數據庫中搜索Rails 2.3.14應用程序時,我需要適當地轉義搜索字符串,以便搜索包含單引號(撇號)的字符串。什麼是最好的方法來做到這一點?我使用mysql寶石,以防萬一。如何從Ruby on Rails轉義MYSQL查詢?

回答

5

您可以使用ActiveRecord的quote方法(例如ActiveRecord::Base.connection.quote("string with ' apostrophe")),但是ActiveRecord的的查詢方法已經逃脫你的SQL你。例如:

a = "string with ' apostrophe" 
ModelName.where("field1 = ?", a) 

將改變 「字符串'撇號」 到 「字符串 '' 撇號」

+1

這對於短的查詢很好,但對於更復雜的查詢,它實際上更容易直接使用SQL。我正在查看一個案例,我在五個不同的表中搜索,並且很難跟蹤哪個變量與使用此語法的查詢部分相匹配。 – joanwolk 2012-07-23 08:51:23

+0

查看範圍。他們讓你把你的查詢分解成邏輯塊,然後根據需要鏈接它們。它更清潔 – Angelo 2012-07-23 13:11:21

+1

我們確實有範圍。另外:有問題的應用程序也使用原始SQL查詢而不是Rails SQL方法作爲性能考慮事項,因此我不會將此代碼切換回ActiveRecord方法。 – joanwolk 2012-07-23 16:02:29

8

使用mysql寶石時,您獲得方法Mysql.escape_string()。使用方法如下:

search_terms = Mysql.escape_string("it's working!") 
conditions = [ "table1.name LIKE '%#{search_terms}%'" ] 
# use conditions for MYSQL query as appropriate 
+1

哪裏是這樣的Postgres的? – 2014-05-06 19:48:44

8

Rails的quotes strings如下:

# Quotes a string, escaping any ' (single quote) and \ (backslash) characters. 
def quote_string(s) 
    s.gsub(/\\/, '\&\&').gsub(/'/, "''") # ' (for ruby-mode) 
end 
+0

這適用於postgresql – 2014-05-06 19:51:53

+0

這很酷,謝謝 – jahrichie 2017-05-05 00:40:05