Escape Zeichen

Für den SQL-Parser der php-txt-db-api müssen einige Zeichen escaped werden.
Darunter versteht man das voransetzten des Zeichens \ (Backslash).
Das ist nötig, damit in einem String enthaltene " als solche erkannt werden
Somit wird zB folgendes SQL Statement möglich ist:

INSERT INTO personen (feld1,feld2) VALUES ("foo"bar","bla");

Ich möchte also in das feld1 den Wert foo"bar einfügen. Damit der Parser aber weis das " nicht angibt das nun der Wert fertig ist, sondern, dass das " noch zum Wert gehört muss ich das Escape-Zeichen \ davor stellen:

INSERT INTO personen (feld1,feld2) VALUES ("foo\"bar","bla");

Für den SQL-Parser der php-txt-db-api müssen Grundsätzlich folgende Zeichen (nur bei Werten innerhalb ' ' oder " ") escaped werden:
' (Einfaches Anführungszeichen), " (doppeltes Anführungszeichen), \ (Backslash)

Es gibt 3 unterschiedliche Varianten ein SQL Statement im PHP Code zu schreiben, bei jeder Art sind die Escape Zeichen anders zu benutzen.
Die erste Variante kommt wohl am häufigsten vor, und wenn man Glück hat braucht man sich gar nie um das escapen oder sogar doppelte escapen zu kümmern.

Variante 1: Formular Felder

Falls man in einem SQL Statement direkt Formular Felder als Werte benutzen möchte (also muss man " " verwenden, damit die Variabeln ausgewertet werden), so muss man selbst gar nichts anpassen. Die Inhalte der Formular Felder werden automatisch mit den korrekten Escape-Buchstaben versehen.

Beispiel:

$db->executeQuery("INSERT INTO personen VALUES('$formFeld1','$formFeld2') ");

Variante 2: SQL Statement ist in " "

Bei einem String in " " müssen von PHP aus u.A. folgende Zeichen escaped werden:

Zeichen Escaped

" (doppelte Anführungszeichen)

\"
\ (Backslash) \\

Da diese 2 Zeichen aber auch noch für den SQL-Parser zu escapen sind, ist bei diesen beiden ein doppeltes escapen nötig (PHP entfernt ja die erste Escape Folge):

Zeichen Escaped (für PHP) Wert escaped für SQL Parser

" (doppelte Anführungszeichen)

\" \\\"
\ (Backslash) \\ \\\\
' (einfaches Anführungszeichen) ' (kein escapen für PHP in " ") \'

Beispiel:

$db->executeQuery("INSERT INTO personen VALUES('Doppeltes: \\\" ','Einfaches: \' '); ");

Variante 3: SQL Statement ist in ' '

Bei einem String in ' ' müssen von PHP aus folgende Zeichen escaped werden:

Zeichen Escaped

' (doppelte Anführungszeichen)

\'
\ (Backslash) \\

 

Da diese Zeichen aber auch noch für den SQL-Parser zu escapen sind, ist bei diesen beiden ein doppeltes escapen nötig (PHP entfernt ja die erste Escape Folge):

Zeichen Escaped (für PHP) Wert escaped für SQL Parser

" (doppelte Anführungszeichen)

" (kein escapen für PHP in ' ') \"
\ (Backslash) \\ \\\\
' (einfaches Anführungszeichen) \' \\\'

 

$db->executeQuery('INSERT INTO personen VALUES("Doppeltes: \" "," Einfaches: \\\' "); ');