mysql_real_escape_string
hagen
- php
Hallo, ich wende das:
if(get_magic_quotes_gpc() == 1){$name= stripslashes($_POST['name']);}
$name= mysql_real_escape_string($name);
auf den eintrag der in eine datenbank gemacht werden soll an.
Verwendet man in dem Namen nun "" ist alles zwischen den zwei Anführungszeichen weg. Ich fürchte fast ich habe da bzgl. mysql_real_escape_string etwas falsch verstanden. Oder woran liegts??
MFG hagen
Sr, für die Frage ein wenig ausführlicheres Lesen im Manual hätte das hervor gebracht:
Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, bevor sie per QUERY an MySQL übermittelt werden.
Somit ist ein weiteres absichern der Daten, wenn ich sie "nur" in die Datenbank schreibe nicht nötig? Wie ist es beim lesen?
MFG
echo $begrüßung;
if(get_magic_quotes_gpc() == 1){$name= stripslashes($_POST['name']);}
$name= mysql_real_escape_string($name);
Es ist ungünstig, die Behandlung der Eingabedaten mit der Behandlung der Ausgabedaten zu vermischen und diese Vorgänge über das Script/Programm zu verteilen. Wenn sich später etwas ändert - z.B. fällt in PHP6 das Feature Magic Quotes weg - hast du nicht nur eine Stelle sondern mehrere anzupassen. Das PHP-Handbuch gibt Tipps, wie die Magic Quotes ausgeschaltet werden können, und führt dabei eine Funktion auf, die am Script-Anfang eingefügt werden soll und die Eingabedaten komplett bereinigt.
Verwendet man in dem Namen nun "" ist alles zwischen den zwei Anführungszeichen weg. Ich fürchte fast ich habe da bzgl. mysql_real_escape_string etwas falsch verstanden. Oder woran liegts??
Das kann ich dir so ohne weiteres nicht sagen. Der Fehler ist sicher in deinem Code zu suchen ...
Wenn man es richtig macht, passiert das nicht:
$sql = sprintf('INSERT tabelle VALUES ("%s", "%s")',
mysql_real_escape_string($wert1),
mysql_real_escape_string($wert2));
$sql = sprintf('SELECT feldnamen FROM tabelle WHERE feld1="%s" AND feld2="%s"',
mysql_real_escape_string($wert1),
mysql_real_escape_string($wert2));
Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, bevor sie per QUERY an MySQL übermittelt werden.
Somit ist ein weiteres absichern der Daten, wenn ich sie "nur" in die Datenbank schreibe nicht nötig?
Dieses "Absichern" muss bei allen SQL-Befehlen erfolgen, die mit (User-)daten zusammengebaut werden. Hintergrund ist, dass ein SQL-Statement ein Text-Befehl ist. Bestimmte Zeichen haben darin eine Sonderbedeutung, z.B. als Zeichenkettenbegrenzer. Möchte man in den Nutzdaten solche Zeichen haben, müssen diese gekennzeichnet werden, damit sie nicht mit ihrer Sonderbedeutung interpretiert werden, z.B. " => ".
Wie ist es beim lesen?
Die maskierten Sonderzeichen werden beim Interpretieren des SQL-Statements durch die eigentlichen Zeichen ersetzt und in ihrer normalen Form in der Tabelle abgelegt. Bei Lesen bekommst du die Daten direkt zurückgeliefert und nicht über den Umweg eines Text-Befehls.
echo "$verabschiedung $name";
Vielen Dank für die ausführlichen ausführungen.
MFG