Badboy46: String escapen für SQL Insert

Beitrag lesen

Hallo

ich hab mir hier eine Funktion gebastelt

function _db_insert($tabelle, $spalte, $wert){

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
falls ich doch mal ein Funktionsname von PHP erwische, läuft mein Script weiter, wie ich das möchte ;)

wenn ich mir da $sql ausgeben lasse, kommt soetwas bei raus:
»»
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 :)

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. Mit 'kay'"add' sorgst du ja nur dafür, dass MySQL wirklich kay'"add in die Datenbank einträgt, statt nach kay\ einen Syntaxfehler (den nächsten Backslash) zu melden. Also: 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?