'このメソッドで文字列内の の出現を に変換したいだけだと仮定すると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