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
参考文献