Probleme mit Hochkommata bei Datenbankabfrage
Mike
- php
Hi,
wenn in dem Inhalt einer Variable ein Hochkommata ' ist, zum Beispiel " CD's " dann erhalte ich die Meldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web9/html/netradio/charts.php on line 16
Der Ausschnitt aus dem Quelltext sieht so aus:
13 $interpret = stripslashes($interpret);
14 $song = stripslashes($song);
15 $result1 = mysql_query("SELECT * FROM netradio_charts WHERE interpret = $interpret");
16 $num_rowsInterpret = mysql_num_rows($result1);
Zunächst wird also in beiden Variablen die Funktion 'stripslashes' angewandt. Anschliessend wird damit eine Datenbankabfrage gemacht und überprüft, ob der Eintrag vorhanden ist oder nicht. Und da meckert er eben (Zeile 16).
Das tritt nur auf, wenn in der Variable $interpret ein Hochkommata vorhanden ist, ansonsten funktioniert es tadellos.
Wo könnte das Problem liegen?
Greetz
Mike
Moin Moin !
15 $result1 = mysql_query("SELECT * FROM netradio_charts WHERE interpret = $interpret");
Schon mal was von Escaping gehört? Nein? Dann RTFM!
So wie der Code da steht, wird deine DB den ersten Angriff nicht überleben.
Alexander
Hi Alexander
Schon mal was von Escaping gehört? Nein? Dann RTFM!
wäre toll, wenn Du den Anfängern, die das hier evt. lesen, auch noch
sagst _wo_ die denn gucken sollen... wenn die das nämlich nicht
kennen, wissen die in der Regel auch nicht wo die gucken sollen,
bzw. wonach sie suchen könnten.
gruss
Moin Moin !
OK, Svens Antwort ist besser.
Alexander
Moin!
13 $interpret = stripslashes($interpret);
14 $song = stripslashes($song);
Ich werde dich fragen, warum du da stripslashes() verwendest, und du wirst vielleicht antworten: "Ich dachte, das ist ganz gut, denn ich will keine Slashes in meiner Datenbank haben".
Dann werde ich dich fragen, woher du denn so genau weißt, dass stripslashes() notwendig ist - schließlich kann magic_quotes_gpc ja auch ausgeschaltet sein, und dann würde stripslashes() mit Sicherheit zuviel entfernen. Und du könntest antworten: "Ähm, sowas gibts. Da habe ich noch nicht drüber nachdacht. Wie findet man das denn zur Laufzeit raus?" Und ich werde dich auf http://www.php.net/manual/de/function.get-magic-quotes-gpc.php verweisen.
15 $result1 = mysql_query("SELECT * FROM netradio_charts WHERE interpret = $interpret");
Außerdem werde ich dich fragen, wie denn die Datenbank den String von $interpret erkennen soll. Und du wirst nachdenken und sagen: "Dazu sind einfache Anführungszeichen da." Und ich werde das Fehlen derselben bemängeln.
Und dann kommt der Augenblick, in dem du erkennst, dass dann einfache Anführungszeichen im String $interpret zu Konflikten führen.
Und dann weise ich dich auf die wunderbare Funktion mysql_escape_string() hin, welche automatisch alle Zeichen eines Strings, die in einer SQL-Abfrage zu Konflikten führen, escapet. http://www.php.net/manual/de/function.mysql-escape-string.php
Und hoffentlich merkt niemand, dass deine Datenbank derzeit angreifbar ist.
- Sven Rautenberg