Moin!
Wenn ich mir die Query ausgeben lasse und sie in phpmyadmin eingebe, bekomme ich ein korrektes Ergebnis.
Warum ist das so?
Ich habe keine Ahnung, da du ja immer noch nicht den kompletten Query, wie er tatsächlich vorliegt, gepostet hast, sondern immer eigenständig Kürzungen vorgenommen hast, die eventuell gerade den Fehler enthalten haben könnten.
Der php-Code hat eine einzige Variable, nämlich die ID. Die wird in der Query auch korrekt umgesetzt:
select ... AND ID = 123 ORDER by ...
Was ist, wenn das AND den vorhergehenden Teil unzulässig verknüpft?
Warum kürzt du Informationen weg? Alles kann wichtig sein, sogar der Name von Tabellen und Spalten.
Dieses Problem taucht übrigens immer wieder mal auf. Und immer wieder liegt es daran, dass ich in der Anfrage selber den Fehler bei der "Aufbereitung" der Variablen mache. Mal komplett ohne Anführungszeichen, mal mit escapten Anführungszeichen /", mal mit ".". Immer muß es anders sein. :-(
Nein, "es" muss immer gleich sein.
Folgende Faustregeln:
1. Alle durch PHP-Variablen in den SQL-String eingebrachten Werte müssen immer in einfachen Anführungszeichen stehen.
2. Alle Inhalte von PHP-Variablen müssen immer durch die Funktion mysql_real_escape_string() in den SQL-String eingefügt werden.
3. Sollte der SQL-String selbst innerhalb von PHP nur in einfachen Anführungsstrichen stehen, müssen die Anführungsstriche von Faustregel 1 natürlich mit Backslash escaped werden - also lieber doppelte Anführungszeichen benutzen.
MySQL erlaubt zwar, dass Zahlenwerte auch ohne einfache Anführungsstriche geschrieben werden dürfen, das sorgt aber für extreme Anfälligkeit bzw. die Notwendigkeit, die PHP-Variablen mit Zahleninhalt nicht mit mysql_real_escape_string(), sondern z.B. mit intval() zu behandeln, um wirklich sicherzustellen, dass garantiert nur ein Zahlenwert in den SQL-String gelangt.
Im Moment bist du potentiell nämlich extrem anfällig für SQL-Injection.
- Sven Rautenberg
"Love your nation - respect the others."