Verstehe die Fehlermeldung nicht.
Karlo
- datenbank
0 Tom0 Sven Rautenberg0 Karlo0 Sven Rautenberg0 Karlo
0 Tom
0 Klawischnigg
Hallo Forum,
$query = "select
...
...
...
FROM spieltag WHERE
.... AND
.... AND
ID = ".$RRB_ID."
ORDER by blabla";
Warum bekomme ich diese Fehlermeldung?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER by blabla' at line 26
Wenn ich mir die Query ausgeben lasse und sie in phpmyadmin eingebe, bekomme ich ein korrektes Ergebnis.
Wo ist da der Haken an der Sache?
Grüße, Karlo
Hello,
$query = "select
...
...
...
FROM spieltag WHERE
.... AND
.... AND
ID = ".$RRB_ID."
ORDER by blabla";Warum bekomme ich diese Fehlermeldung?
Weil Du foobar nicht beachtet hast und nun grummelgrummel System, dass das nicht ataata.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Liebe Grüße aus Syburg bei Dortmund
'Glaube nicht an "liebe Grüße", die ein footer automatisch setzt.
Hello,
'Glaube nicht an "liebe Grüße", die ein footer automatisch setzt.
Na, dann schreib doch in Zukunft etwas sinnvollere Fragetexte.
Der von Dir veröffentlichte deutet auf absolutes Misstrauen und Geringschätung der übrigen Forumsteilnehmer hin. Eine so schlampig gestellte Frage, kann man nicht beantworten.
Aber wenn Du meine Antwort überstezt in Dein Dein 'blabla', dann wird sie wohl schon zur Ursache des Fehlers passen. Also: nochmal zurückspulen und das echte Statement mit der echten Fehlermeldung leifern, dann bekommst Du auch eine echte Antwort.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Moin!
$query = "select
...
...
...
FROM spieltag WHERE
.... AND
.... AND
ID = ".$RRB_ID."
ORDER by blabla";Warum bekomme ich diese Fehlermeldung?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER by blabla' at line 26
Weil du irgendwo _vor_ ORDER BY einen Fehler eingebaut hast.
Wenn ich mir die Query ausgeben lasse und sie in phpmyadmin eingebe, bekomme ich ein korrektes Ergebnis.
Wir kennen deine Query nicht, wir kennen nur PHP-Code, der dynamisch irgendeinen String zusammenbaut. Alles, was in den Variablen steht, kann den Fehler provozieren, wenn die Variablen "falsche" Inhalte haben.
Wo ist da der Haken an der Sache?
Zeige uns deinen gesamten generierten, fertigen SQL-String, nicht den PHP-Code!
- Sven Rautenberg
Hi Sven,
Weil du irgendwo _vor_ ORDER BY einen Fehler eingebaut hast.
Einen Fehler? Ok. Muß wohl so sein, weil Ohne Fehler keine Fehlermeldung.
Wenn ich mir die Query ausgeben lasse und sie in phpmyadmin eingebe, bekomme ich ein korrektes Ergebnis.
Warum ist das so?
Hat phpmyadmin denn eine eingebaute Fehlerkorrektur? ;-)) Ich meine, Fehler ist Fehler, oder?
Ob die Query jetzt aus meinem Script in mysql einfließt oder über phpmyadmin läuft... Ich veränder sie ja nicht mehr.
Insofern kann es doch nur mit einer Fehlerkorrektur von phpmyadmin zu tun haben??
Wir kennen deine Query nicht, wir kennen nur PHP-Code, der dynamisch irgendeinen String zusammenbaut. Alles, was in den Variablen steht, kann den Fehler provozieren, wenn die Variablen "falsche" Inhalte haben.
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 ...
Setze ich übrigens anstelle von ID = ".$RRB_ID." gleich ID = 123 in den php-code, dann funktioniert alles einwandfrei.
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. :-(
Grüße, Karlo
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
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.
Nene, da war ich mir schon recht sicher, dass es mal wieder die Anführungszeichen waren.
ID = "$RRB_ID" funktioniert bestens ;-)
- Alle Inhalte von PHP-Variablen müssen immer durch die Funktion mysql_real_escape_string() in den SQL-String eingefügt werden.
Bei jedem Query? Egal, ob insert, select, update...?
Danke für Deine Hilfe, Sven!
Grüße, Karlo
Moin!
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.
Nene, da war ich mir schon recht sicher, dass es mal wieder die Anführungszeichen waren.
ID = "$RRB_ID" funktioniert bestens ;-)
Sind aber die falschen Anführungszeichen. Einfache '' sind richtig. Nur die funktionieren auch mit mysql_real_escape_string().
- Alle Inhalte von PHP-Variablen müssen immer durch die Funktion mysql_real_escape_string() in den SQL-String eingefügt werden.
Bei jedem Query? Egal, ob insert, select, update...?
Ja, immer. Weil in der Variable Zeichen enthalten sein könnten, die SQL nicht "nackt" im Query stehen haben darf. Offensichtlich ist es, wenn ein einfaches Anführungszeichen in der Variablen vorkommt, und der Variableninhalt insgesamt durch einfache Anführungszeichen abgegrenzt wird. Dann stehen da drei einfache Anführungszeichen hintereinander - das kann nur Murks ergeben.
Abgesehen davon sind auch noch ein paar andere Zeichen zwingend zu Escapen - da mysql_real_escape_string() exakt weiß, welche das sind, muss ich sie mir nicht im Kopf merken - ich muss mir nur merken, immer zu escapen.
- Sven Rautenberg
echo $begrüßung;
Nene, da war ich mir schon recht sicher, dass es mal wieder die Anführungszeichen waren.
ID = "$RRB_ID" funktioniert bestens ;-)
Sind aber die falschen Anführungszeichen. Einfache '' sind richtig. Nur die funktionieren auch mit mysql_real_escape_string().
Nein, beide Typen (' und ") werden von mysql_real_escape_string() berücksichtigt. MySQL lässt beide als Stringbegrenzer zu, andere SQL-Dialekte wollen da nur die einfachen Anführungszeichen.
Abgesehen davon sind auch noch ein paar andere Zeichen zwingend zu Escapen - da mysql_real_escape_string() exakt weiß, welche das sind, muss ich sie mir nicht im Kopf merken - ich muss mir nur merken, immer zu escapen.
Nur noch der , die anderen Zeichen (\x00, \r, \n, ^Z) werden von mysql_real_escape_string() nur für optische Zwecke in Logfiles behandelt: (Strictly speaking, MySQL requires only that backslash and the quote character used to quote the string in the query be escaped. This function quotes the other characters to make them easier to read in log files.)
Auch ich betone noch einmal: Auch wenn mysql_real_escape_string() "zu viel" behandelt, ist deren Einsatz bei jeglichen in eine Query eingefügten Strings obligatorisch, wenn einem seine Daten lieb sind.
echo "$verabschiedung $name";
Hello,
Hat phpmyadmin denn eine eingebaute Fehlerkorrektur? ;-))
Ja. Gegen Idotische Spalten- oder Indexnamen.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Hi there,
$query = "select
...
...
...
FROM spieltag WHERE
.... AND
.... AND
ID = ".$RRB_ID."
ORDER by blabla";Warum bekomme ich diese Fehlermeldung?
Weil jede vernünftige Datenbankabfragesprache Fussball hasst...