1. ホーム
  2. sql

[解決済み】なぜSQL句でWHERE 1=1 AND <conditions>を使用するのでしょうか?

2022-04-17 12:24:55

質問

なぜ WHERE 1=1 AND <conditions> SQL句(文字列を連結して得られるSQL、ビュー定義のどちらか)の中で

SQLインジェクション対策に使うというのをどこかで見たことがあるのですが、とても変な感じがします。

インジェクションがある場合 WHERE 1 = 1 AND injected OR 1=1 と同じ結果になります。 injected OR 1=1 .

後日談:ビュー定義での使用はどうでしょうか?


ご回答ありがとうございました。

まだです。 なぜこの構文をビューの定義に使ったり、ストアドプロシージャの中で使ったりするのか、理解できません。

たとえば、こんな感じです。

CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 AND table.Field=Value

解決方法は?

条件のリストがコンパイル時にわからず、代わりに実行時に構築される場合、条件が一つか複数かを気にする必要はない。このようにすべて生成することができます。

and <condition>

を作成し、それらをすべて連結します。このとき 1=1 を開始すると、最初の and には、関連付けるものがあります。

おっしゃるとおりあまり役に立たなさそうなので、インジェクション対策に使われているのを見たことがありません。I ある 実装の利便性を高めるために使用されているのを見たことがあります。SQLクエリエンジンは、最終的に 1=1 ので、パフォーマンスへの影響はないはずです。