Eigentlich @scaisEdge richtig ist, die ‚- +‘ in MySQL (interactive cmdline) ist kein Kommentar, ist diese Nutzung in der Regel für urlencoding (einen Raum in einem Abfrageteil verwendet wird, kann codiert werden ‚+ 'oder'% 20 ').
In diesem Fall ist "- +" nur zwei Arten von Operatoren: plus & minus, und ein - und ein + Offset. Also ist diese Sequenz gleich:
select username, password from users where username = '' - '';
Original:
mysql> select username, password from users where username = '' --+ '';
+----------+------------+
| username | password |
+----------+------------+
| Dumb | Dumb |
| Angelina | I-kill-you |
| Dummy | [email protected] |
| secure | crappy |
...
Now:
mysql> select username, password from users where username = '' - '';
+----------+------------+
| username | password |
+----------+------------+
| Dumb | Dumb |
| Angelina | I-kill-you |
| Dummy | [email protected] |
| secure | crappy |
...
Sie können sehen, die Ergebnisse sind die gleichen.
Zweitens, '' gleich INTEGER 0 hier. In MySQL, alle Felder ohne gültige ganze Zahl wird gleichzusetzen 0.
mysql> select '' = 0;
+--------+
| '' = 0 |
+--------+
| 1 |
+--------+
mysql> select '0s28' = 0;
+------------+
| '0s28' = 0 |
+------------+
| 1 |
+------------+
mysql> select '8s28' = 0;
+------------+
| '8s28' = 0 |
+------------+
| 0 |
+------------+
mysql> select '8s28' = 8;
+------------+
| '8s28' = 8 |
+------------+
| 1 |
+------------+
====Type Conversion====
mysql> select '12s' + 3;
+-----------+
| '12s' + 3 |
+-----------+
| 15 |
+-----------+
mysql> select 's52s6' + 3;
+-------------+
| 's52s6' + 3 |
+-------------+
| 3 |
+-------------+
mysql> select 's8' + 3;
+----------+
| 's8' + 3 |
+----------+
| 3 |
+----------+
So '' - '' bedeutet 0 - 0 noch ist.
Während die Spalt NUTZERNAME nicht hat nicht nur einen Namen, der mit einem gültigen numerischen Zeichen beginnt (nicht 0), so dass alle die Namen gleich 0 und entspricht den conditon ‚wo username = 0‘
mysql> select 'Dumb' = 0;
+------------+
| 'Dumb' = 0 |
+------------+
| 1 |
+------------+
Um diese Schlussfolgerung zu überprüfen, können wir in einen Datensatz einfügen, dass der Benutzername mit einer Ganzzahl wie '4love' beginnt. Sie werden sehen, dass alle Datensätze außer dem neuen aufgelistet sind.
Eine ähnliche Frage ist hier: mySQL returns all rows when field=0
"Es funktioniert in einigen Situation tatsächlich" Kannst du das klären? Wo funktioniert das nicht, wann funktioniert es nicht? – FrankerZ
@FrankerZ ist wirklich klar, wenn Sie versuchen .. - + alle Zeilen zurück .. (scheint ein seltsames Verhalten), aber - + ist keine Kommentarfolge – scaisEdge
Ich habe eine mögliche Erklärung Ihrer Frage geschrieben – scaisEdge