2016-07-20 10 views
-1

私は結果が、それはすべての行が返されSQL SELECT文で "" ""は何を意味しますか?

SELECT * FROM users WHERE ""=""

、あるSQL SELECTステートメントを持っています。

だから、""=""とは何ですか?

+0

あなたのdbmsは何ですか? –

+0

MySQL rdbms .... – shiv

+2

[WHERE 1 = 1 AND をSQL句で使用する理由は?](http://stackoverflow.com/questions/242822/why-would-someone-use-where -1-1と-s-conditions-in-a-sql-clause) – fantaghirocco

答えて

3

これは、すべての行を選択する必要があることを示す不要なWHERE句です。

=演算子は等しいかどうかをチェックするために使用され、WHERE句は特定の条件が真であるすべてのレコードを返します(この場合は""="")。この条件は常に真と評価されるため(空の文字列は常に空の文字列と等しいため)、テーブル内のすべての行が選択されます。

あなたは同じ結果を受け取るためにそれを完全にオフに残すことができる:

SELECT * 
    FROM users 
+0

私はSQLインジェクション攻撃を研究しており、これを発見しました。ええ、今私はあなたのポイントを見ます。ありがとう! :) – shiv

+1

このようなもの、または「1 = 1」が見えるときに頭に浮かぶべき最初のものの1つは、SQLインジェクションです。 –

+0

あなたの有益な言葉をもう一度ありがとう。 :) – shiv

0

私見を最後の部分を削除することができます。このwhereステートメントは、各データセットに対して2つの静的値を比較します。したがって、それぞれの静的値はすべて同じです。

+0

私はそれが意見だとは思わない。それはもっと事実だよね? –

+0

ああ、あなたが正しいです、私は何かを混乱させないと言うつもりです。 –

0

通常、このような構文は、動的SQLでwhere句を構成するために使用されます。たとえば、ユーザーが名前や国を選択することができれば、あなたは、クエリとして記述することができます。これは、ロジックをキャプチャしますが

where (name = @name or @name is null) and 
     (county = @country or @country is null) 

を、それがうまく最適化しません。だから、多くの場合、アプリケーションロジックを構築するために、動的SQLを使用します。

set @where = '1=1'; 
set @where = concat(@where, if(@name is not null, ' and name = @name', '')); 
set @where = concat(@where, if(@country is not null, ' and country = @country', '')); 

"" = ""の使用はちょうど1=1の代替形になります。

SQLインジェクションに関する議論にどのように陥るかは、どちらもユーザー入力に関係するので、わかります。

実際には、追加の比較なしでクエリを記述することができるため、これは少し怠惰です(ただし、MySQLはコンパイル時に最適化します)。

関連する問題