9
11

More than 5 years have passed since last update.

ノウハウ募集:検索クエリを動的SQL組み立てしたくない

Posted at

動的にSQLを組み立てない、というのはRDBを扱う上で鉄則と言えましょう。

  • SQLインジェクションを防ぐため
  • コンパイルのオーバーヘッドを避けるため

などとは言いますが、何よりもプログラムをランタイムに動的生成するということ自体に本能的な嫌悪感を感じます。たとえ組み立てをしてくれるのがフレームワークであっても。

さて、とはいえ動的SQL組み立てがどうしても避けられないシーンが、意外に日常的なタスクで出てきます。
それは、 複数の検索項目をもつ検索フォーム です。

項目になにかユーザー入力があればそれは絞込対象なのでWHERE句にAND条件追加、とせざるを得ません(それをフレームワークに任すとしても)。

あくまでプリペアドステートメントで表現しようと(:mail_cond IS NULL OR mail like :mail_cond + '%')なんて書いてみたこともありますが、「あわよくば適切なインデックスをつかってくれ」という望みが完全に絶たれるんですよね。

複数の検索項目をもつ検索フォーム、皆様はどのようにプログラミングなさっているでしょうか。ご意見お聞かせください。

9
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11