0
我知道使用field in (a1,a2,a3)
比使用=運算符要快。我怎樣才能以rails方式使用`field in`來寫這個?
SELECT *
FROM user
WHERE Greeting IN ('hello', 'hi', 'hey')
如何在軌道上寫上述查詢?
我知道使用field in (a1,a2,a3)
比使用=運算符要快。我怎樣才能以rails方式使用`field in`來寫這個?
SELECT *
FROM user
WHERE Greeting IN ('hello', 'hi', 'hey')
如何在軌道上寫上述查詢?
你會做這樣的事情:
users = User.where('greeting in (?)', %w{hello hi hey})
Rails會知道該怎麼做一個數組,%w{hello hi hey}
,作爲一個佔位符的值。或者,如果你已經有了一個字符串數組:
h_words = [ 'hello', 'hi', 'hey' ]
users = User.where('greeting in (?)', h_words)
# or even this
users = User.where('greeting in (:words)', :words => h_words)
,或者可能是最Railsy的方式,像這樣:
users = User.where(:greeting => %w{hello hi hey})
是否'User.where( '在問候()?',h_words )'需要'h_words'中的數組元素才能保證sql注入安全?做軌道,就好像PHP在準備好的聲明中那樣做了嗎? – user482594 2012-01-17 04:06:40
@ user482594:ActiveRecord將負責正確地轉義和編碼佔位符值,以便將它交給一個普通字符串數組。如果你使用了字符串插值,你必須自己做,所以除非絕對必要,否則不要這樣做。 – 2012-01-17 04:11:13