Zitat:
Da bekomme ich mit Delphi xe2 jetzt nur noch Murks raus, weil irgendwann zwischen TurboDelphi (Delphi 6) und Delphi xe2 die Änderung vollzogen wurde, dass #39 statt einem Hochkomma (') bei Delphi xe2 zwei Hochkommas ('') (kein Gänsfüßchen) auswirft.
Nein, es wurde im Delphi absolut nichts umgebaut.
(höchstens einige Debugtools, ala Variablenanzeigen, wurden überarbeitet und zeigen Vieles jetzt "fehlerfreier" an)
Delphi-Quellcode:
query := '
select * from Tabelle where Feld=''
Test''
';
Variable := '
Test';
query := '
select * from Tabelle where Feld=''
' + Variable + '
''
';
query := '
select * from Tabelle where Feld='#39 + Variable + #39;
'' (in einem String) und #39 oder #$27, Ord(39) usw. sind grundsätzlich genau das Selbe.
Es sind schon immer Kodierungen, um
ein ' darzustellen.
In anderen Sprachen sieht man z.B. stattdessen \' , wo dann \\ für ein \ stünde
Raus kommt hier immer
Code:
select * from Tabelle where Feld='Test'
Wenn möglich solltest du ganz einfach parametrisierte Abfragen verwenden (so wie es schon öfters genannt wurde)
und falls das nicht unterstützt wird, dann das entsprechende "QuoteString", welches im String die ' ergänzt.
z.B.
query := 'select * from Tabelle where Feld=' + QuoteString(Variable);
Bei einer "ordentlichen" Zugriffskomponente, kommt dann z.B. sowas bei raus
Delphi-Quellcode:
query.Sql.Text := '
select * from Tabelle where Feld = :wert';
query.ParamByName('
wert').Value := '
Test';
Wenn dein
mySql so arbeitet, wie ich es noch vom PHP+
mySQL kenn, dann wohl eher so
Delphi-Quellcode:
query.Sql.Text := '
select * from Tabelle where Feld = ?';
query.Params[0].Value := '
Test';
In dem Parameter können dann soviele Sonderzeichen und vorallem Steuerzeichen drin vorkommen, wie sie wollen.
Bei QuoteString wird davon vieles abgefangen und wenn man das ohne irgendwas selbst zusammenbaut, dann hat man ganz schnell ein rießiges "Sicherheitsproblem".
Stichwort
SQL-Injection.