10. 1、プレースホルダを使う
params[:user][:name] = “Guns N' Roses”
# ダメな例
User.where("name like '%#{params[:user][:name]}%'")
#=> SELECT "users".* FROM "users" WHERE (name like
'Guns N' Roses')
# 良い例
User.where("name like ?", "%#{params[:user][:name]}
%")
#=> SELECT "users".* FROM "users" WHERE (name like
'Guns N'' Roses')
11. 2、どうしてもSQLを直接実行しないと
いけない場合は値をサニタイズする
class User < ActiveRecord::Base
def self.force_bang(hostname)
values = sanitize_sql_array(["pending = ?",
"t"])
conditions = sanitize_sql_array(["email
like ?", hostname])
update_all(values, conditions)
end
end
User.force_bang("h'otmail.com")