Hi Flo,
Wenn du "Hans" (mit den Anführungszeichen) in dein Formular eingibst, dann sollte in der Datenbank auch "Hans" (mit den Anführunszeichen) gespeichert werden, und nicht "Hans" oder irgendetwas anderes. Du willst ja genau das, was eingegeben wird, auch in der Datenbank haben.
Dass die " um Hans herum escaped werden (d.h. ein \ davor gesetzt wird), liegt an dem PHP-"Feature" Magic Quotes. Die Prepared Statements sorgen nur u.a. dafür, dass die Daten, die du an die Datenbank schickst, auch genauso in der Datenbank ankommen.
OK, ich habe jetzt "magic_quotes_gpc" deaktiviert, also auf OFF und nun wird "Hans" auch als "Hans" gespeichert.
Außerdem habe ich:
magic_quotes_runtime = Off
magic_quotes_sybase = Off
Ist das OK so?
Einfacher ist es, die Magic Quotes gleich ganz auszuschalten, oder ihre Wirkung zu Scriptbeginn global rückgängig zu machen (siehe dazu dedlfix' Link).
Habe Euch beide verstanden jetzt, das problem hab ich nun ja nicht mehr.
Magic Quotes waren gedacht, um SQL-Injection-Probleme zu lösen. Doch dieses Feature wirkt auf alle Eingabedaten, nicht nur auf die, die in ein SQL-Statement eingebaut werden und auch auf die, die aufgrund von P.S. aus Prinzip kein SQL-Injection-Problem haben.
Verstehe. (Glaub ich zumindest)
Sofern du Prepared Statements verwendest, brauchst du dich nicht mehr um SQL-Injection kümmern, unabhängig davon, ob Magic Quotes aktiviert sind oder nicht.
Danke! Verstehe.
Immer, wenn du mit dem DBMS kommunizierst, werden dabei irgendwelche Daten übertragen. Und damit alle Beteiligten wissen, wie diese Daten kodiert (utf-8, etc..) sind, musst du das halt angeben, ist doch logisch :-)
Ich dachte, ich muß nur Acht drauf geben, wenn ich was zur DB sende, nicht umgekehrt. Ist aber schon klarer jetzt!
Tja, wenn ich nur wüßte, wie?
So wie dus weiter oben auch gemacht hast. SQL String mit
$stmt = $db->prepare($sql)
vorbereiten, dann die Parameter mit$stmt->bind_param()
einfügen. Das funktioniert auch bei WHERE. ("... WHERE foo=?")
Das Prinzip ist auch bei diesen beiden Statements kein anderes als bei Nummer 1.
Ich bin gerade am Versuchen und Testen!
Danke einstweilen!
MfG
Der Brombeermilchtrinker