なぜ誰かがクエリに「where 1 = 1」を入れるのでしょうか?


18

今日、データベース内で、where句の最初のステートメントがであるビューに出会いましたwhere 1 = 1。これはすべてのレコードでtrueを返すべきではありませんか?レコードをフィルタリングしていないのに、なぜ誰かがこれを書くのでしょうか?



3
彼らはソムボディのウェブサイトをハックしたいからです;-)
ティムシュメルター

回答:


40

一部の動的クエリビルダーにはこの条件が含まれているため、「実際の」条件はAND、などのチェックを行わずに追加できますif (first condition) 'WHERE' else 'AND'


クエリビルダーが条件が行の最初であるかどうかを判断できないのは奇妙に聞こえますが、私もあなたが正しいと思います。
ern0

3
多くの場合、「クエリビルダー」は、SQLステートメントに手作業で連結するコードを書いている人です。ライブラリを構築するより正式なクエリを導入すると、ライブラリが削除される場合があります。
アラクニッド

1
このような「古い」コードを処理する必要がありましたが、それは非常に真実です。SQLステートメント全体を単一の文字列にアセンブルしている場合、if / thenまたはcaseステートメントの束があり、トリガーされる場合とトリガーされない場合があります。これらのコードパスのいずれかが使用されるかどうかは分からないため、WHERE句にANDが埋め込まれている(一貫して文字列の一部であるため)ため、(a)問題のあるANDを削除するか( b)単純に論理的な正当性を渡します。「1 = 1」を追加すると、文字列を正しく編集するよりも簡単です。
エイブリーペイン

5

プログラム内に同様のクエリを生成する多くのSQLステートメントの構築ポイントがある場合、このトリックによって検査済みのマークを付けることができます。文がカウントに関するものである場合、以下のコードを使用し42て、SQLログからgrepを実行できます。

select count(42) from table

4

常に真である状況を提供するため、結果には影響しませんが、WHERE句にはすでに1つの項目があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.