[英]Escaping single quotes in Ruby
因此,我正在制作一些紅寶石腳本來解析.csv並輸出大型MySQL查詢。 問題是我使用的某些名稱帶有單引號,這使我的SQL混亂。
我嘗試將引號轉換為轉義引號失敗,但是我不確定為什么。 但是可以肯定的是,當我打開query.txt文件時,像D'vinci這樣的名稱就是這樣,而不是D \\'vinci。
我究竟做錯了什么?
require 'csv'
filename = ARGV[0]
q = "INSERT INTO `table` (`username`, `password`, `firstname`, `lastname`, `email`) VALUES "
CSV.foreach(filename) do |row|
last_name, first_name, email, id = row.each {|c| c.gsub "'", "\'"}
q += "('#{id}', SHA1('password'), '#{first_name}', '#{last_name}', '#{email}'),\n"
end
q += ";"
File.open("query.txt", 'w').write(q)
不要編寫自己的SQL轉義。 請始終使用適當的數據庫驅動程序提供的方法。
如果您使用的是MySQL,即mysql
或較新的mysql2
gem,則有一個escape
函數可以為您處理此問題。
目前尚不清楚,當大多數數據庫具有某種類型的導入文件功能時,為什么要首先編寫SQL。 特別是MySQL,它具有LOAD DATA INFILE
,如果使用正確,它可以以許多不同的格式讀取。
each
返回接收者。 因此,該塊內的gsub
不會執行任何操作。 將其更改為map
,就可以了。 或者,您可以保留each
並使用gsub!
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.