2016-07-18 262 views
1

我有字符串的以下數組:結合字符串數組成一個字符串

array = [id, message, date, length] 

實施例:

array = ["1", "test's message", "2016-01-01", "15"] 

我想把它合併成一個字符串。我將使用該字符串使用DB插入數據:

ActiveRecord::Base.connection.execute 

我所做的:

result = "(#{array[0}', '#{array[1]}', '#{array[2]}', '#{array[3]}')" 

message包含特殊字符'(ASCII碼039)。這會導致SQL異常。我如何構造一個包含'字符的result字符串?

編輯:

爲了把數據BD我用:

conn = ActiveRecord::Base.connection 
sql = "INSERT INTO table_name (`id`, `message`, `date`, `length`) VALUES #{result}" 
    conn.execute sql 

編輯:

我解決了這個利用AR方法:

ActiveRecord::Base.connection.quote(message) 
+2

你做錯了。有一個沒有任何理智的開發者會在2016年通過加入字符串來構建SQL。 – mudasobwa

+0

在何處引發異常?在加載文件?在生成字符串?在SQL查詢期間? – sawa

+0

'你做錯了。有一個沒有人理智的開發人員會在2016年通過加入字符串來構建SQL。' 爲什麼?我需要表現。我想使用原始SQL將數據存入數據庫。我不需要AR,因爲我已驗證數據,而且我不擔心依賴注入,因爲它是簡單的背景作業。告訴我爲什麼。我有大量的數據和使用普通的sql增加插入20x – dewastator

回答

-2

使用Array#joinDoc Link

arr = [id, message, data, length] 
join_result = arr.join(',') 
0

你需要逃脫這樣

array = ["1", "test''s message", "2016-01-01", "15"] 
1

您可以使用此特殊字符代碼生成結果。

array = ["1", "test's message", "2016-01-01", "15"] 

result = "(#{array.map{|s| s.gsub!("'", "''"); "'#{s}'"}.join(",")})" 
# => => "('1','test''s message','2016-01-01','15')"