我正在使用一个在文件中编写sql命令的程序。
该计划是红宝石。我发现它没有正确地逃脱特殊的字符。
我找到了执行转义但不完全正确的函数。
def escape_for_sql(s)
s=s.to_s
if s.nil?
"''"
else
"'"+ s.gsub("'","\'")+"'"
end
end
之前从未使用过红宝石,所以有人可以为我提供正确的功能,甚至更好 告诉我是否有内置方法?
P.S。我无法安装任何外部模块
答案 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