echo $begrüßung;
Vielen Dank für deine beispiele, aber irgendwo läuft bei mir was gewaltig schief. Sämtliche Eingaben werden
in der DB unverändert gespeichert, ob´s \ oder ', einfach alles.
Genau das ist das Ziel. mysql_real_escape_string() versieht diese Werte nur mit einer Transportsicherung. Wenn du ein Gerät zu Hause stehen hast, ist keine Transportsicherung mehr nötig. Im Gegenteil, sie ist für den bestimmungsgemäßen Gebrauch eher hinderlich.
Ein SQL-Statement (und HTML ebenso) mischt Anweisungsteile mit Daten, um sie gemeinsam zu übertragen. Um zu unterscheiden, dass nun ein Teil Daten kommt, muss er gekennzeichnet werden. Er wird in "" oder '' eingerahmt. Man nennt das Quotieren. Innerhalb dieses quotierten Teils muss man nun wiederum zwischen einem Quotierungsende und einem " oder ' als Datenbestandteil unterscheiden. Deswegen notiert man es als Datenbestandteil in der Form " bzw. ' und hat damit nun auch noch den \ als besonders zu kennzeichnen, leitet dieser doch nun eine Maskierung ein. Hinzu kommen noch ein paar Sonderzeichen, die ebenfalls mit einem vorangehenden \ notiert werden, wie beispielsweise der Zeilenumbruch in Form eines \n.
Für HTML ist das ähnlich, hier sind die Zeichen < und > zu beachten, und weil die Maskierungen mit einem & anfangen (< und >), auch dieses (&). Innerhalb von Attributwerten kommt noch " bzw. ' hinzu (" und 9).
URLs sind ein weiteres Beispiel. Hier werden ebenfalls Zeichen mit besonderer Bedeutung, die in Werten vorkommen, umgeschrieben.
Diese Transportsicherungen werden vom Empfänger selbständig entfernt. Er arbeitet nur noch mit den Roh-Daten. Gegebenenfalls sind auch beim "Rücktransport" Sicherungsmaßnamen zu ergreifen. Doch für Datenbanken ist das nicht nötig. Die Daten werden beim Auslesen nicht mehr in einen Anweisungstext eingebunden sondern direkt geliefert. Beim Abfragen der Datenbankwerte muss man also keine Demaskierung vornehmen.
echo "$verabschiedung $name";