Dlaczego ktoś miałby wpisać „where 1 = 1” w zapytaniu?


Odpowiedzi:


40

Niektóre konstruktory zapytań dynamicznych uwzględniają ten warunek, dzięki czemu można dodawać dowolne „rzeczywiste” warunki ANDbez sprawdzania if (first condition) 'WHERE' else 'AND'.


Brzmi dziwnie, że konstruktor zapytań nie może ustalić, czy warunek jest pierwszy w linii, ale myślę, że masz rację.
ern0

3
często ma to miejsce, gdy „konstruktor zapytań” to ktoś, kto pisze kod w celu ręcznego połączenia w instrukcję SQL. czasem wprowadzenie bardziej formalnej biblioteki budowania zapytań eliminuje ją.
araqnid

1
Musiałem poradzić sobie z takim „starym” kodem i jest to bardzo prawdziwe. Gdy składasz całą instrukcję SQL w pojedynczy ciąg, pojawią się wiązki instrukcji if / then lub case, które mogą, ale nie muszą. Ponieważ nigdy nie wiadomo, czy którakolwiek z tych ścieżek kodu jest zajęta, ALE masz klauzulę AND w klauzuli WHERE (z powodu klauzuli, która jest konsekwentnie częścią ciągu), musisz (a) usunąć niepoprawne AND lub ( b) po prostu przekazać logiczny truizm. Dodanie „1 = 1” jest łatwiejsze niż prawidłowe zredagowanie ciągu.
Avery Payne,

5

Jeśli masz w swoim programie wiele punktów budujących instrukcje SQL, które generują podobne zapytania, możesz oznaczyć badany za pomocą tej sztuczki. Jeśli zdanie dotyczy zliczania, możesz użyć kodu poniżej, aby można było wylogować się 42z dziennika SQL.

select count(42) from table

4

Zapewnia sytuację, która jest zawsze prawdziwa, więc nie wpływa na wyniki, ale wiesz, że jest już jeden element w klauzuli WHERE.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.