2016-07-18 213 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')"