18. december 2002 - 22:30Der er
8 kommentarer og 1 løsning
Problem med at gemme String i MySQL
Jeg har et lille irriterende problem, som der garanteret er nogen der kender løsningen på...
Når jeg gemme en String i min MySQL-DB i en varchar-kolonne, som indeholder f.eks. tegnet ' sker der en fejl, idet dette tagn også brugeres i sql til at afgrænse strengen.
Hvordan får jeg gemt min String korrekt i MySQL ???
Hvis du bruger: String val; stmt.executeUpdate("INSERT INTO T VALUES('" + val + "')"); kunne du prøve med: String val; PreparedStatement ps = con.prepareStatement("INSERT INTO T VALUES('?')")); ps.setString(1,val); ps.executeUpdate();eller: String val; PreparedStatement ps = con.prepareStatement("INSERT INTO T VALUES(?)")); ps.setString(1,val); ps.executeUpdate();(jeg kan ikke huske hvilken af dem der er korrekt) og se om det kan håndterer det tegn korrekt.
Ifølge det, så er mit forslag: String val; PreparedStatement ps = con.prepareStatement("INSERT INTO T VALUES(?)")); ps.setString(1,val); ps.executeUpdate(); udmærket.
må erkende at svaret kom hurtigere end problemet var gennemtænkt, og må følgende give Arne ret i at en fornuftig løsning vil være at eliminere de forskellige escapecodes som kan forekomme i en tekst og ikke som jeg angiver.
Den tekniske forklaring er: - en normal statement sender en streng gennem en SQL parser og elvfølgelig har man problemet - en prepared statement sende strengen med "?" gennem en SQL parser og får lavet en data struktur i databasens interne format. Når så du sætter strengen bliver dens data sat ind i det interne format. Og det interne format er normalt et binært format (formentligt med fixed lengt data felter eller eksplicit længde angivelse på felter). Og så er quotes ikke længere et problem.
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.