@Sir Rufo
Hmm warum nutzt die Functionen keiner? Thread-Start + alle anderen Antworten -> es wissen halt zu wenige, daß es diese Funktionen gibt, oder viel mehr hat sich noch keiner damit auseinander gesetzt, wie so eine
Query gesplittet wird.
Alle
SQL RDBMS haben da das gleich Verhalten. Sobald der Char, welche String-Anfang/Ende signalisiert, oder der Escape-Char sich in diesem String befindet, müssen dies Chars escaped werden.
Simples Beispiel:
insert into Tabelle1 values ('Foo'bar', 'Foo'bar');
MySQL ließt nun jeden Char und erstllt eine Liste von Tokens. Quasi Token.Value/Token.Type.
die ersten Tokens bis zur Klammer übergehe ich mal. Dann folgt beim jetzigen string:
Token.Value = "Foo"
Token.Type = Quoted
Token.Value = "bar"
Token.Type = word -> da ohne Anführungszeichen
Token.Value = ", "
Token.Type = Quoted
Token.Value = "Foo"
Token.Type = word -> da ohne Anführungszeichen
Token.Value = "bar"
Token.Type = Quoted
Also ein riesen Schlamassel, da ALLE
SQL Provider davon augehen: Was zwichen den Quotes steht ist DER String. um
MySQL zu zwingen über die Half-Quote zu lesen, muß diese Escaped werden. Für die meisten CharSets wird hier der '\' hergenommen. Für Big5 oder GB1080 zum Beispiel ist das unmöglich, da bei den EUC kodierten charsets meisten '\' das zweite Byte darstellt.
Also zum String zurück:
insert into Tabelle1 values ('Foo\'bar', 'Foo\'bar');
...
Token.Value = "Foo'bar"
Token.Type = Quoted
Token.Value = ","
Token.Type = Symbol
Token.Value = " "
Token.Type = WhiteSpace
Token.Value = "Foo'bar"
Token.Type = Quoted
Ihr Seht:
MySQL entfernt die Escape Chars auch wieder von selber.
Wenn ihr Abfragen selber strickt, deren Inhalt unbekannt ist, verwendet entweder die Escape-Functionen oder Parameter, welche genau das automatisch machen.
Gruß Michael