Hallo,
Aus einem Formular kommt ein String Wert, diesen möchte ich in meine mysql Datenbank schreiben.
Doch ich glaube ich sollte ihn vorher absichern.
jein, "absichern" ist eine schlechte Formulierung. Richtig ist allerdings: Du solltest den String auf jeden Fall so behandeln, dass er für SQL unverfänglich ist und kein Durcheinander verursachen kann.
function InDatenbankSchreiben($string)
{
return mysql_real_escape_string(htmlentities($string))."' COLLATE latin1_general_cs";
}
Das ist aus zwei Gründen Unfug.
Erstens ist die Funktion htmlentities nicht für den Kontext "SQL" geeignet, sondern sollte -wenn überhaupt- erst angewendet werden, wenn du den String wieder aus der Datenbank holst und als HTML ausgeben möchtest. Und selbst dann wäre htmlentities() nicht unbedingt sinnvoll, sondern eher htmlspecialchars().
Für die Übergabe eines Strings über die SQL-Schnittstelle ist mysql\_real\_escape\_string() völlig angemessen, und man braucht keine weiteren Schritte zusätzlich.
Zweitens schreibt diese Funktion nichts in die Datenbank, sondern bearbeitet nur den String und liefert ihn modifiziert zurück. Daher ist der Funktionsname völlig irreführend gewählt. Das Anhängsel "' COLLATE ..." ist an dieser Stelle ebenfalls Murks - nicht zuletzt deshalb, weil es mit einem Anführungszeichen beginnt, dessen Partner weit und breit nicht zu sehen ist.
So long,
Martin
--
Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(