select * from Employees where Name = 'John' or ''=''
Diese Anweisung ruft alle Mitarbeiter in der Tabelle ab.Was bedeutet '' = ''
Ich konnte nicht verstehen, wie ''=''
interpretiert wird? Könnten Sie bitte erklären?
select * from Employees where Name = 'John' or ''=''
Diese Anweisung ruft alle Mitarbeiter in der Tabelle ab.Was bedeutet '' = ''
Ich konnte nicht verstehen, wie ''=''
interpretiert wird? Könnten Sie bitte erklären?
''=''
ist immer true
da es zwei leere Zeichenfolge zu vergleichen
So im Wesentlichen ''=''
ist ein Tautology
und darüber hinaus verwenden Sie einen OR
Zustand und somit der gesamte Zustand ist immer true
. Ihre WHERE
kann auch wie
where Name = 'John' or 1 = 1
Ihre Anfrage nur geschrieben werden kann select * from Employees
als die WHERE
Zustand ohne Wirkung ist.
Ich habe gerade etwas hart gesucht. Es war einfach genug. Ich konnte den Punkt nicht sehen. Danke –
Guter Fang. Falls jemand darüber stolpert, ist "immer" in * allen * Datenbanken nicht wahr - das wäre in Oracle (leider) nicht der Fall. –
@GordonLinoff, das ist seltsam zu wissen, aber in 'SQL Server' ist es * immer * – Rahul
Es ist eine ziemlich sinnlos where
Klausel, wie es mit einem Namen ist die Suche:
where Name = 'John'
Aber es ist auch mit einem Ausdruck zu suchen, die immer true zurück:
or '' = ''
So werden alle Daten zurückgegeben werden würde ungeachtet.
Es sollte keinen Grund geben, den zweiten Teil aufzunehmen, es sei denn, diese where
Klausel wird irgendwo im Flug generiert und der Namensfilter ist optional. Wenn der immer zutreffende Teil enthalten ist, würde ein Fehler verhindert, wenn die Namen nicht gefiltert würden. Selbst wenn ich noch darüber nachdenken würde, würde ich seine Verwendung in Frage stellen, da es zusätzliche Daten zurückgeben würde.
Wenn es eine generierte where
Klausel ist und es erforderlich ist, könnte es logischer zu tun:
or 1=2
Dann werden Sie nicht zusätzliche Daten zurück.
ist '' ''gleich' '' ', die Antwort ist ja, und da die Bedingung in einem' ODER' ist, ist das ganze 'WHERE' wahr – Lamak