06. april 2006 - 09:37
Der er
5 kommentarer og 1 løsning
Reserverede tegn i forbindelse med SQL-streng
Hej Alle. Jeg har en side hvor folk kan lægge indlæg ind på. indlæggene gemmes i en Access tabel. Mit problem er at folk ikke kan benytte de reserverede tegn som " og ' Jeg indsætter indlæggene i tabellen ved hjælp af følgende kommando set RSUG = CnnUG.Execute("INSERT INTO tblIndlaeg ( Kategori, Navn, Dato, Tekst) Values ('" & MCK & "','" & MCY & "','" & Now() & "','" & MCZ & " ')") Er de nogen der har løsningen på dette. Hilsen JBjerre
Annonceindlæg fra Infor
06. april 2006 - 09:45
#1
Den umiddelbare løsning er at udskifte apostroffer med dobbeltapostroffer: set RSUG = CnnUG.Execute("INSERT INTO tblIndlaeg ( Kategori, Navn, Dato, Tekst) Values ('" & replace(MCK,"'","''") & "','" & replace(MCY,"'","''") & "',Now(),'" & replace(MCZ,"'","''") & " ')") men en bedre løsning (efter min overbevisning er at bruge et command-objekt med parametre.
06. april 2006 - 09:49
#2
Command-objektet kan bruges således: set cmd = Server.CreateObject("ADODB.Command") set cmd.ActiveConnection = CnnUG cmd.CommandType = adCmdText cmd.CommandText = "INSERT INTO tblIndlaeg (Kategori, Navn, Dato, Tekst) Values (?,?,Now(),?)" cmd(0) = MCK cmd(1) = MCY cmd(2) = MCZ cmd.Execute Som du kan se bliver hele koden mere overskuelig og du slipper for at tænke på hvad brugeren har indtastet (selvom det stadig er en god idé at undersøge om der er noget ulovligt scriptkode i teksterne, hvis det skal vises i en browser igen).
06. april 2006 - 09:53
#3
Hvis du vil undgå fejl i koden pga. brugen af ADO-konstanter kan du paste denne linie ind i toppen af den side du lægger denne kode i (eller i global.asa - så skal du ikke tænke mere på det på resten af sitet): <!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
06. april 2006 - 10:34
#4
Hej Softspot Jeg har indsat <!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" --> i global.asa og indsat Execute sætningen som nedestående set cmd = Server.CreateObject("ADODB.Command") set cmd.ActiveConnection = CnnUG cmd.CommandType = adCmdText cmd.CommandText = "INSERT INTO tblIndlaeg (Kategori, Navn, Dato, Tekst) Values (?,?,Now(),?)" cmd(0) = MCK cmd(1) = MCY cmd(2) = MCZ cmd.Execute Og har testet med alverdens tegn og kan ikke fremkalde fejl, så alt er OK. indsæt et svar hvis du vil have points. Tak for hjælpen JBjerre
06. april 2006 - 10:42
#5
Velbekomme :)
06. april 2006 - 18:13
#6
Tak for point :)
Kurser inden for grundlæggende programmering