LIKEクエリを作成しようとしています。
純粋な文字列の要求は安全ではないことを読みましたが、安全なLIKE Hash Queryの記述方法を説明するドキュメントは見つかりませんでした。
出来ますか? SQLインジェクションを手動で防御する必要がありますか?
クエリ文字列が適切にサニタイズされるようにするには、配列またはハッシュクエリ構文を使用して条件を記述します。
Foo.where("bar LIKE ?", "%#{query}%")
または:
Foo.where("bar LIKE :query", query: "%#{query}%")
query
に%
文字が含まれている可能性がある場合は、最初に sanitize_sql_like
でquery
をサニタイズする必要があります。
Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%")
Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%")
Arelを使用すると、この安全で移植可能なクエリを実行できます。
title = Model.arel_table[:title]
Model.where(title.matches("%#{query}%"))
PostgreSQLの場合は
Foo.where("bar ILIKE ?", "%#{query}%")
できるよ
MyModel.where(["title LIKE ?", "%#{params[:query]}%"])