我還不清楚如何使用Sequel運行原始SQL查詢。如何使用Sequel運行原始SQL查詢
目前我想這一點:
DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1") do |row|
@zonename = row
end
我如何可以運行查詢作爲原始SQL訪問,然後像正常的結果?
if @zonename.name = "UK"
我還不清楚如何使用Sequel運行原始SQL查詢。如何使用Sequel運行原始SQL查詢
目前我想這一點:
DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1") do |row|
@zonename = row
end
我如何可以運行查詢作爲原始SQL訪問,然後像正常的結果?
if @zonename.name = "UK"
我有幾個三分球這可能是有用的:
你可以簡單地做:
@zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).first
NB:你忽略了一個事實,有可能是更多的結果匹配標準。如果您期望返回多個可能的行,那麼你可能想通過做建設成果的一個數組...
@zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).all
和處理所有的人。
返回集是一個散列。如果@zonename
點的一個記錄,那麼你可以做
@zonename[:column_name]
指一個名爲「欄」字段。你不能這樣做@zonename.colum_nname
(你實際上可以使用一些元編程用輔助方法修飾@zonename
,但我們暫時忽略它)。
續集是一個很好的界面,越多你瞭解它越多,你會喜歡它。
注意,代替:
DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1")
你應該做的:
DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode)
否則,你打開自己的SQL注入,如果你不控制@dialcode
內容。
你能告訴我什麼方法被引擎蓋下的'fetch'所調用以逃避用戶輸入嗎?我有一個複雜的查詢,它是用許多方法構建的,並且在構建查詢時需要從我的數據庫調用中分別轉義用戶輸入。 – 2014-04-24 07:23:07
對不起,剛剛在文檔中找到它(我在搜索時正在閱讀該文檔,將在此處爲其他人發佈):https://github.com/jeremyevans/sequel/blob/cf1e987c1c2f7e74dca5c0f8312149bede659a21/doc/security.rdoc。該方法是'DB.literal(my_insecure_string)'。謝謝你的圖書館傑里米。 – 2014-04-24 07:26:13
謝謝,我現在能夠進步 – veccy 2010-06-29 22:26:12