【问题标题】:Escaping single quotes in Ruby在 Ruby 中转义单引号
【发布时间】:2012-10-13 00:08:02
【问题描述】:

所以我正在制作一个小的 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)

【问题讨论】:

标签: ruby


【解决方案1】:

不要编写自己的 SQL 转义。请始终使用相应数据库驱动程序提供的方法。

如果您使用 MySQL,mysql 或更新的 mysql2 gem,有一个 escape 函数应该为您处理这个问题。

当大多数数据库都具有某种从文件导入功能时,为什么要首先编写 SQL 并不完全清楚。 MySQL 尤其具有LOAD DATA INFILE,如果使用正确,它可以读取多种不同的格式。

【讨论】:

    【解决方案2】:

    each 返回接收者。因此,您在该块内的gsub 什么也不做。改成map就可以了。或者,您可以保留 each 并改用 gsub!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多