2012-03-31 9 views
0

ich habe diesen Code, und aus irgendeinem Grund, bringt es auf den genauen Wert (einschließlich mysql_real ...)php SQL-Injection-Escape-Zeichenfolge

mysql_query("INSERT INTO members (username) VALUES ('mysql_real_escape_string($uname)')"); 

wie umschreiben ich das so mache ich das nicht haben Problem?

Antwort

2

mysql_real_escape_string ist eine PHP-Funktion, keine MySQL-Funktion.

$value = mysql_real_escape_string($uname); 

mysql_query("INSERT INTO members (username) VALUES ('$value')"); 

UPDATE: Inline mysql_real_escape_string

mysql_query("INSERT INTO members (username) VALUES ('".mysql_real_escape_string($uname)."')");

+0

gibt es keine Möglichkeit, ich könnte es einfach in den SQL-Bereich binden, also muss ich sie nicht separat machen? Ich dachte, ich hätte jemanden gesehen ... – droidus

+0

Ja, aber warum? 'mysql_query (" INSERT INTO Mitglieder (Benutzername) VALUES ('".mysql_real_escape_string ($ uname)."') ");' – David

+0

idk, nur neugierig. Vielen Dank! – droidus

2

Sie auch eine prepared statement verwenden könnte, wo PDO Pflege für zu entkommen nimmt alles, was Datenbank funktioniert es mit (nicht nur MySQL):

$stmt = $dbh->prepare("INSERT INTO members (username) VALUES (:username)"); 

// either: 
$stmt->bindParam(':username', $uname); 
$stmt->execute(); 

// or as Corbin pointed out in the comments: 
$stmt->execute(array('username' => $uname)) 
+0

Wenn ich diese Syntax vorher noch nie gesehen habe, haben Sie den() around: username verpasst. Und es ist auch erwähnenswert, dass er $ stmt-> execute (array ('username' => $ uname)) in diesem Beispiel tun könnte. – Corbin

+0

Sie haben Recht, repariert es. Danke :) –

+0

PDO hat ein Problem, wo es das Passwort ausspuckt, wenn Sie Fehler melden. Außerdem denke ich, dass es für jemanden, der neu ist, schwierig sein könnte, ihn aufzunehmen. – David