簡體   English   中英

在Ruby中轉義單引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM