Avatar billede thesurfer Nybegynder
29. oktober 2009 - 16:49 Der er 9 kommentarer og
1 løsning

RegEx, ret plinger i SQL sætninger, Regular Expression

Jeg har brug for noget RegEx til at fixe plinger (') i SQL sætninger.

Eksempel:

navn = "Ole's automobil"
alder = 30


sql = "insert into mintabel (navn, alder) values('" & navn & "', " & alder & ")"

Bliver jo til følgende som fejler:

"insert into mintabel (navn, alder) values('Ole's automobil', 30)"

Det skal igennem RegEx og blive til:

"insert into mintabel (navn, alder) values('Ole''s automobil', 30)"


Da jeg er elendig til RegEx, spørger jeg her.. :-)
Avatar billede thesurfer Nybegynder
29. oktober 2009 - 16:54 #1
Læg mærke til, at der kan være strenge og tal, som også fremgår at mit eksempel..

Hmm.. hva' nu hvis man selv har skrevet 2x ' tegn.. ?

Me dont know hvordan det normalt virker.. :-)
Avatar billede arne_v Ekspert
31. oktober 2009 - 04:13 #2
Hvorfor bruger du ikke parameters og lader driveren/provideren bekymre sig om dette problem ??
Avatar billede arne_v Ekspert
31. oktober 2009 - 04:14 #3
et dårlig usikker hack vil være:

sql = "insert into mintabel (navn, alder) values('" & replace(navn,"'","''") & "', " & alder & ")"
Avatar billede arne_v Ekspert
31. oktober 2009 - 04:15 #4
http://www.eksperten.dk/guide/1250 forklarer parameters i ADO sammenhæng

(jeg har også diverse andre eksempler på lager)
Avatar billede arne_v Ekspert
31. oktober 2009 - 04:16 #5
regex kan jeg ikke se megen pointe i at bruge
Avatar billede thesurfer Nybegynder
31. oktober 2009 - 07:17 #6
Situationen er følgende:

En SQL-sætning sammensættes og plinger erstattes. Problemet er, at det er op til programmøren at huske at erstatte plinger. Hvis han har glemt det et sted, er der en sikkerhedsbrist.

Denne SQL-sætningen sendes som parameter til en funktion, der afvikler SQL-sætningen, opretter et Recordset, lukker forbindelsen og returnerer Recordset'et.

Denne funktion bruges en milliard forskellige steder, på et stort site. Overgangen fra SQL-sætning til parameters vil tage lang tid (mange steder der skal erstattes).

Hvis man kunne lave noget RegEx, skal man kun erstatte koden i selve funktionen.

Vi har planer om at bruge parameters senere, men ikke lige nu.. :-)


Så.. for the time being..

Er det muligt at lave en RegEx, der kan løse problemet?
Avatar billede arne_v Ekspert
31. oktober 2009 - 22:17 #7
Jeg tror ikke at det er muligt.

INSERT INTO t (f1,f2) VALUES('A','B','C')

kan være

INSERT INTO t (f1,f2) VALUES( 'A','B' , 'C' )
->
INSERT INTO t (f1,f2) VALUES( 'A'',''B' , 'C' )

eller

INSERT INTO t (f1,f2) VALUES( 'A' , 'B','C' )
->
INSERT INTO t (f1,f2) VALUES( 'A' , 'B'',''C' )

så det er ikke muligt at lave en 100% korrekt algoritme.
Avatar billede thesurfer Nybegynder
07. oktober 2010 - 19:32 #8
arne_v: Smid venligst et svar, så du kan få points :-)
Avatar billede arne_v Ekspert
07. oktober 2010 - 19:48 #9
kommer her
Avatar billede thesurfer Nybegynder
07. oktober 2010 - 21:17 #10
Tak for hjælpen og god aften :-)
- points givet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester