Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#18

AW: Delphi xe2 und #39 =ZWEI Hochkommas

  Alt 5. Okt 2012, 14:53
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Okt 2012 um 15:02 Uhr)
  Mit Zitat antworten Zitat