Robert Bienert: String escapen für SQL Insert

Beitrag lesen

Hallo

Nabend!

Kleine Frage nebenbei: Warum beginnt der Name der Funktion mit einem Unterstrich? AFAIK ist so etwas doch eigentlich PHP intern vorbehalten.

also das mit den _ am anfang klappt einwandfrei

Dann ist ja gut, ich wollte nur darauf hinweisen.

falls ich doch mal ein Funktionsname von PHP erwische, läuft mein Script weiter, wie ich das möchte ;)

Soso

INSERT INTO user (_username_r, _username, _password, _email, _reg_email, _reg_date, _last_login, _rang, _fehlversuche, _fehlversuchzeit) VALUES ('kay'"aad','kay'"aad','200820e3227cf69c1756a6b531e7e0d2','kay@xxx.de','kay@xxx.de','1090147928','1090147928','user','0','1090147928')
»»

Sieht gut aus, alle "gefährlichen" Zeichen escaped, selbst Zahlen in Hochkomma, sehr schön.

das wird ja auch generiert :)

Wahrscheinlich mit einer dieser *sql_escape_string Funktionen, recht praktische Dinger.

wenn ich dann in phpMyAdmin schaue, wurde der Nick so eingetragen
kay'"aad statt so kay'"aad

Ist klar, weil phpMyAdmin bei der Ausgabe automatisch die Backslashes entfernt. [...] In der Datenbank steht, was auch die Ausgabe zeigt, in der Tat kay'"add. Willst du hingegen selbst die Backslashes auch dort _in der Datenbank_ stehen haben, musst diese natürlich ebenfalls escapen. Im Gegensatz zu PHP, Perl, ... unterscheidet SQL nicht bei den Quotes, ob Backslashes aufgelöst werden oder nicht.

das es zu keinen bösen Überraschungen kommen kann, wenn nur ' und " statt ' udn " in der MySQL Tabelle steht?

Was für böse Überraschungen? MySQL ist es vollkommen gleichgültig was in der Datenbank steht, siehe z.B. die BLOB-Felder. Das Escapen ist nur für die Abfragen notwendig, damit MySQL weiß, wo jeder Wert beendet ist.

HTH, Robert