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.
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') ");
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: \' '); ");
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: \\\' "); ');