Moin!
Ich habe in meiner MySQL-Tabelle (5.0.2) folgender Einträge:
+----+-------------------------+
| id | name |
+----+-------------------------+
| 35 | SSSJPII - Omaha Special |
| 52 | \n\r"' |
+----+-------------------------+(id 52 habe ich mit mysqli_real_escape_string for dem Einfügen bearbeitet.)
Was bedeutet das effektiv? Steht der obige String so, wie hier ausgegeben, in der Datenbank drin, oder wurde er durch mysqli_real_escape_string() so generiert, bevor er ins SQL-Statement kam?
Die Anweisung
SELECT name FROM game WHERE name = '\n\r"'';
liefert mir jedoch kein Ergebnis. Was läuft denn falsch?
Du kannst die obige Anweisung ja gar nicht so direkt in PHP eingeben - du mußt sie immer irgendwie als String in PHP integrieren. Da ich deinen PHP-Code aber nicht kenne, kann ich dir die Fallstricke nicht zeigen, in denen du dich verständnismäßig gerade verfangen hast.
Da du innerhalb von SQL einfache Hochkommas verwendest, ist es schlau, als Stringbegrenzer für den Gesamtstring doppelte Hochkommas zu benutzen. Das wiederum führt dazu, dass gewisse Zeichen innerhalb des Strings Sonderbedeutung erhalten!
Und diese Sonderbedeutung pfuscht dir hier ins Handwerk. Der doppelte Backslash im Quelltext wird vom PHP-Parser zum einfachen Backslash, und ein Backslash vor doppelten und einfachen Hochkommas verschwindet ganz. Dein obiges SQL-Statement sucht also nach Datenbankeinträgen, die folgendem String entsprechen:
\n\r"' - zumindest auf den ersten Blick.
Auf den zweiten Blick erzeugst du möglicherweise eine ungültige SQL-Anweisung.
- Sven Rautenberg
"Love your nation - respect the others."