dedlfix: (PHP) SQL-Dump aus Textarea ausführen

Beitrag lesen

echo $begrüßung;

Nein, da liegst du nicht richtig. \ wird zu einem einfachen \ aufgelöst. Das dahinterkommende " ist der Abschluss einer mit " begonnen Zeichenkette.

So etwas wäre aber doch ungültiger SQL-Code:
INSERT INTO table VALUES (\'hallo');

Ja, weil der \ außerhalb von Zeichenketten keine Bedeutung hat gibt es da einen Syntaxfehler.

Bin ich dann nicht doch auf der richtigen Seite, wenn ich alle ', vor denen mindestens ein Backslash steht als "Quote innerhalb eines Eintrags" werte?

Innerhalb von Zeichenketten hat der Backslash die Bedeutung, das nachfolgende Zeichen als zum Inhalt der Zeichenkette gehörend zu werten.

"foo " bar ' bla \" wird aufgelöst zu: foo " bar ' bla \

Du musst einfach nur erkennen, dass jedes beliebige Zeichen nach einem doppelten Backslash auf seiner eigenen Hochzeit tanzt und damit zusammen mit dem ihm unmittelbar vorangegangenen Backslash keine Quotierung darstellt.

Nochmal auseinandergepflückt:

"    Anfang der Zeichenkette
foo
"   ein maskiertes "
bar
'   ein maskiertes '
bla
\   ein maskierter \ "    Ende der Zeichenkette

Und noch gemeiner wird es, wenn mehr als zwei \ hintereinander vorkommen:
\"  ein \ und ein maskiertes "
\\" zwei Backslashes und ein Ende der Zeichenkette
\\"  zwei \ und ein maskiertes "
usw.

Meine Zeichenketten sind in den Beispielen mit "" eingefasst. Analog musst du das gleiche für in '' eingefasste Zeichenketten berücksichtigen.

Erschwerend kommt noch hinzu, dass ' in ""-Strings und umgekehrt nicht maskiert werden müssen.
In "'" stellt das ' kein Ende einer Zeichenkette dar (und auch keinen Anfang).
Du musst also auch noch berücksichtigen, ob du grad in einer "" oder ''-Zeichenkette bist.

Beachte bitte auch http://dev.mysql.com/doc/mysql/en/string-syntax.html

echo "$verabschiedung $name";

P.s. Wenn ich das jetzt nicht verständlich erklärt habe, dann weiß ich auch nicht mehr weiter :-(