SQL文のためのエスケープ

テキストデータを解析してMySQLにぶちこむスクリプトを書いていたら,つまづいた.どうやらシングルクォートが悪さをしているらしい.
よっしゃ,バックスラッシュでエスケープしたろ,と思ったけれどうまくいかない.

どうやらSQLの文字列は文字を二重にすることでエスケープするらしい.初耳だよ.
gsubを使って置換をすればいいのだけれど,ブロックつきのgsubが推奨されているらしい.

通常のエスケープ

def quote_by_backslash(str)
  str.gsub(/['"\\]/) {|ch| '\\' + ch }
end

SQLの場合はこうなる

def double_quote(str)
  str.gsub(/['"]/) {|ch| ch + ch }
end

参考文献