mysql_real_escape_string

Thomasio

Erfahrenes Mitglied
Irgendwie verstehe ich trotz 1000 Webseiten zum Thema die Verwendung nicht ganz.
Da wird mit Funktionen und sprintf() irgendwas umgewandelt, aber wie die Syntax im mysql_query() aussieht steht nicht dabei, zumindest habe ich es nicht gefunden, oder nicht verstanden.

Anders gesagt, ich brauche mal eine Erklärung für Doofe, wie ich diesen Code

Code:
$Inhalt = $_POST['irgendwas'];
mysql_query("UPDATE `tablename` SET `feldname` = ".$Inhalt." WHERE `id` = 1");

so ändere, dass mysql_query() den Inhalt korrekt 1:1 in die DB einträgt, völlig egal, was da drin steht.
Vermutlich brauche ich also stripslashes() und mysql_real_escape_string()
aber wie ist die richtige Syntax dazu?
 
Als erstes solltest du im Query mal den String wie ien String behanden. Sprich: in ' setzen
PHP:
mysql_query("UPDATE `tablename` SET `feldname` = '{$Inhalt}' WHERE `id` = 1");
 
Ähem, mal abgesehen davon, dass es (ohne Umwandling von $Inhalt) gar nicht anders geht, ich hatte das absichtlich weggelassen, weil ich nicht weiss, ob mysql_real_escape_string() die ' selber dazu macht.
Noch dümmer, ich weiss ja nicht mal, was ich überhaupt an mysql_real_escape_string() übergeben soll, das gesamte query, nur $Inhalt, oder '$Inhalt', oder was?
 
Wenn dann den Content von $Inhalt. Und nein, mysql_real_escape_string macht da keine Single-Quotes automatisch hin. Da verwechselst du was mit Prepared Statements ;-)
 
Das war genau die erste Seite, die ich zum Thema gelesen habe, aber genau das verstehe ich halt nicht.

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));

Was soll das sprintf()?
 
sprintf()

Gibt eine foirmatierte Zeichenkette zurück, mit verschiedenen Typen, wie auch sehr schön auf php.net erklärt.
Zum Maskieren wie du es meinst is es nicht nötig, da kannst du auch ganz normal:

PHP:
$sql = "UPDATE table SET field = '" . mysql_real_escape_string($zeichenkette) . "';
mysql_query($sql);

schreiben.
 
Hi,
also ich würde es so machen:
PHP:
$Inhalt = mysql_real_escape_string($_POST['irgendwas']);
mysql_query("UPDATE `tablename` SET `feldname` = '{$Inhalt}' WHERE `id` = 1");

Die zweite Zeile baut den String ja einfach nur durch aneinanderhängen zusammen und schickt ihn zur DB. Es kann also sein, falls der $Inhalt MySQL-Sonderzeichen (besonders das Hochkomma ') enthält, dass der aneinandergehängte String dadurch kaputt geht:

Beispiel:
PHP:
$Inhalt = "Hallo, wie geht es?";
mysql_query("UPDATE `tablename` SET `feldname` = 'Hallo, wie geht es?' WHERE `id` = 1");
PHP:
$Inhalt = "Hallo, wie geht's?";
mysql_query("UPDATE `tablename` SET `feldname` = 'Hallo, wie geht's?' WHERE `id` = 1");
Im zweiten Beispiel würde MySQL denken, dass der String bereits nach dem "geht" vorbei ist und das folgende "s" nicht oder falsch interpretieren.

Machst du es aber so:
PHP:
$Inhalt = mysql_real_escape_string("Hallo, wie geht's?");
mysql_query("UPDATE `tablename` SET `feldname` = 'Hallo, wie geht\'s?' WHERE `id` = 1");
Dann werden alle MySQL-Zeichen mit Sonderbedeutung escaped.
Du weist mit mysql_real_escape_string PHP also an: "Interpretier alle MySQL-Sonderzeichen in diesem String einfach als normales Zeichen und pack es in die DB. Kümmer dich nicht um die Sonderfunktion!"
 
Zurück