使用ruby写入文件mysql命令

时间:2013-08-15 12:54:34

标签: ruby escaping

我正在使用一个在文件中编写sql命令的程序。

该计划是红宝石。我发现它没有正确地逃脱特殊的字符。

我找到了执行转义但不完全正确的函数。

def escape_for_sql(s)
    s=s.to_s
    if s.nil?
    "''"
    else
        "'"+ s.gsub("'","\'")+"'"
    end
end

之前从未使用过红宝石,所以有人可以为我提供正确的功能,甚至更好 告诉我是否有内置方法?

P.S。我无法安装任何外部模块

1 个答案:

答案 0 :(得分:1)

假设您只是希望此方法将字符串's的出现次数转换为\',这应该有效:

def escape_for_sql(s)
  s=s.to_s
  if s.nil?
    "''"
  else
    "'" + s.gsub("'") { %q{\'} } + "'"
  end
end

puts escape_for_sql "hello, this 'is' a string"
# => 'hello, this \'is\' a string'

在原始方法中,替换用双引号括起来,因此没有插入反斜杠。

修改

注意:要替换所有MySQL特殊字符,请执行以下操作。我只包含了一些MySQL特殊字符 - 要查看完整列表,请查看http://dev.mysql.com/doc/refman/5.0/en/string-literals.html。另请注意,使用自定义转义方法存在安全问题。

def escape_for_sql(s)
  s=s.to_s
  if s.nil?
    "''"
  else
    literals = %w{ % ' " \r \n }
    literals.each do |x|
      s.gsub!(/#{x}/) { '\\' + x }
    end
    "'" + s + "'"
  end
end