Entwickler-Ecke
Datenbanken - SQL Injektion verhindern: Problem mit Parametern
Krischa - Di 23.06.09 09:29
Titel: SQL Injektion verhindern: Problem mit Parametern
Hi,
ich ersetzte gerade in meine ganzen SQL-Abfragen die Variablen durch Parameter. Es kalppt schon ganz gut nur an einer stelle hänge ich jetzt.
Alte Abfrage:
Delphi-Quelltext
1:
| query2.SQL.Text:='SELECT LS_RG FROM '+kun_s1+' WHERE ART="'+prod[j].ian+'" AND EDATUM>"'+rechdatum+'" AND LS_RG IS NOT NULL'; |
Die Abfrage hat einwandfrei funktioniert.
Neue Abfrage:
Delphi-Quelltext
1: 2: 3:
| query2.SQL.Text:='SELECT LS_RG FROM '+kun_s1+' WHERE (ART=:ParamART) AND (EDATUM>:ParamEDATUM) AND LS_RG IS NOT NULL'; query2.Params.ParamByName('ParamART').Value:=prod[j].ian; query2.Params.ParamByName('ParamEDATUM').Value:=rechdatum; |
Beim ersten Parameter gibt es noch keine Probleme aber wie mache ich das beim Zweiten(ParamEDATUM). Hier gibt es im Programm eine Exception.
BenBE - Di 23.06.09 10:07
Die da wäre welche? Kristallkugeln haben in diesem Forum Seltenheitswert ;-)
tif - Di 23.06.09 10:12
Hallo,
du mußt noch den Parameter - Datentyp definieren, sonst übergibt die query die Parameter nicht korrekt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| query2.SQL.Text:='SELECT LS_RG FROM '+kun_s1+' WHERE (ART=:ParamART) AND (EDATUM>:ParamEDATUM) AND LS_RG IS NOT NULL'; query2.Params.ParamByName('ParamART').datatype:=ftString; query2.Params.ParamByName('ParamART').Value:=prod[j].ian; query2.Params.ParamByName('ParamEDATUM').datatype:=ftDateTime; query2.Params.ParamByName('ParamEDATUM').Value:=rechdatum; |
Krischa - Di 23.06.09 10:16
Da du ja doch nicht Hellsehen kannst hier die Fehlermeldung:
Zugriffsverletztung bei Adresse 7C91E913 in Modul "ntdll.dll". Lesen von Adresse 01621498.
Wie gesagt mit der alten Variante geht es und mit der neuen nicht. Er hat ein Problem mit dem ParamEDATUM. Ich bin mir auch nicht sicher ob man bei Feld>Wert das so schreiben kann wie ich es getan habe.
@tif Die Variablen sind alles Strings. Muss ich dem dann wirklich noch sagen was es ist?
Delete - Di 23.06.09 10:45
Versuch es mal mit
Delphi-Quelltext
1:
| query2.Params.ParamByName('ParamEDATUM').Value:=StrToDate(rechdatum); |
Krischa - Di 23.06.09 10:51
Ok, mit StrtoDate hat es geklappt. Hätte nicht damit gerechnet das er da ein Datum haben will, weil er in der alten Version unbedingt Strings haben wollte.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!