2013-10-06 23 views
1

我想有以下數組一個Ruby文件中執行我的INSERT字符串:如何將Ruby數組項插入到SQLite中?

names_arr = ["Jack", "Susan", "Peter"] 

在同一個Ruby的文件,我需要的sqlite3的寶石,並有這樣的代碼:

names_arr.each do |each_name| 
    db.execute('INSERT INTO users (name) VALUES ("#{each_name}");') 
end 

我在我的「用戶」表期待這樣的:

id name 
1 Jack 
2 Susan 
3 Peter 

相反,我得到這個:

id name 
1 #{each_name} 
2 #{each_name} 
3 #{each_name} 

很明顯,我沒有正確插入,但我嘗試了很多不同的東西,無法弄清楚我錯在哪裏。

我正在使用SQLite3和Ruby。

+0

試試這個'db.execute( 「INSERT INTO用戶(名稱)VALUES(#{each_name});」' –

+1

插入雙引號 –

回答

2

你有這個代碼的幾個問題:

names_arr.each do |each_name| 
    db.execute('INSERT INTO users (name) VALUES ("#{each_name}");') 
end 
  1. 您正在嘗試使用一個單引號字符,但字符串插值只有在雙引號字符串中的作品裏面Ruby的字符串插值(和here文檔,%Q{...}串,正則表達式,...)。
  2. 標準SQL對字符串文字使用單引號,而不是雙引號。有些數據庫可以讓你用雙引號離開,但這是一個非常糟糕的習慣。
  3. 無論如何,你不應該使用字符串插值來構建SQL,你不會在1999年盜用PHP,所以你應該使用佔位符並讓數據庫庫處理引用。

SQLite的駕駛execute理解?佔位符,所以你可以這樣說:

names_arr.each do |each_name| 
    db.execute('INSERT INTO users (name) VALUES (?)', each_name) 
end 
+0

謝謝,這是最有幫助的!還發現這個鏈接有助於插入多列數據與佔位符 – SamTalks

+0

僅供參考,我剛剛瞭解到佔位符mu使用的另一個術語是「衛生替換」。 – SamTalks

相關問題