05. maj 2005 - 17:13
Der er
26 kommentarer og 2 løsninger
Fejl ved update i mysq database.
String sql = "UPDATE tabel SET navn = '" + m.getNavn() + "', adresse = '" + m.getAdresse() + "' WHERE bruger_id = " + m.getBruger_id; Når der er en ' i den variabel der skal opdateres kommer der en fejl. Hvordan kan jeg gøre så det er muligt at gemme ' i databasen?
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
sætte følgende foran \\' eller //'
hvis igen af dem virker er det fordi der kun skal være en strej foran:) altså /' eller \' men mener det er det andet.
Men jeg ved jo ikke hvornår eller hvor den kommer.
Men hvis den kommer så er det i en af de variabler som du bruger i din sql? Se på String klassen.. denne metode replaceAll(DinVariabel,"\\'")
Det er desværre Java busschou :-)
String nnavn = m.getNavn(); String nadresse = getAdresse() nnavn = nnavn.replaceAll(navn,"\\'") nadresse = nadresse.replaceAll(nadresse,"\\'") String sql = "UPDATE tabel SET navn = '" + nnavn + "', adresse = '" + nadresse + "' WHERE bruger_id = " + m.getBruger_id;
og jeg er bare i den helt forkerte kategori... Jeg bukker og beklager Ved ikke hvordan jeg havnede i Java når jeg troede jeg var i PHP sorry!
ps. hvis ikke det virker skal du bare lige ændre i de der \\' som foreslået.
prøver.. :-) helt ok busschou
lidt at prøve med (men mener den før virker og ellers den første her) nnavn = nnavn.replaceAll(navn,"\'") nadresse = nadresse.replaceAll(nadresse,"\'") nnavn = nnavn.replaceAll(navn,"/'") nadresse = nadresse.replaceAll(nadresse,"/'") nnavn = nnavn.replaceAll(navn,"//'") nadresse = nadresse.replaceAll(nadresse,"//'")
pis alle skal lige rettes til nnavn = nnavn.replaceAll(',"\'") nadresse = nadresse.replaceAll(',"\'") nnavn = nnavn.replaceAll(',"/'") nadresse = nadresse.replaceAll(',"/'") nnavn = nnavn.replaceAll(',"//'") nadresse = nadresse.replaceAll(',"//'")
så den første du fik skulle se sådan her ud.. sorry for spam.. sover helt! String nnavn = m.getNavn(); String nadresse = getAdresse() nnavn = nnavn.replaceAll(',"\\'") nadresse = nadresse.replaceAll(',"\\'") String sql = "UPDATE tabel SET navn = '" + nnavn + "', adresse = '" + nadresse + "' WHERE bruger_id = " + m.getBruger_id;
Tror der er syntax fejl i måden replaceAll bruges på.
String nnavn = m.getNavn(); String nadresse = getAdresse() nnavn = nnavn.replaceAll("\'","\'") nadresse = nadresse.replaceAll("\'","\'") String sql = "UPDATE tabel SET navn = '" + nnavn + "', adresse = '" + nadresse + "' WHERE bruger_id = " + m.getBruger_id; eller String nnavn = m.getNavn(); String nadresse = getAdresse() nnavn = nnavn.replaceAll("\'","\\'") nadresse = nadresse.replaceAll("\'","\\'") String sql = "UPDATE tabel SET navn = '" + nnavn + "', adresse = '" + nadresse + "' WHERE bruger_id = " + m.getBruger_id;
der skal lige nogle ; efter linjerne selvfølgelig.
jeg testede lige med nnavn = nnavn.replaceAll("'","\'") nadresse = nadresse.replaceAll("'","\'") og den virker her. men du kan jo lige prøve det jeg smed ind før
Jeg skal lige have rodet lidt mere med det. Der er noget andet der driller nu også :P Jeg vender tilbage. Tak for hjælpen.
Hvis man vil escape så må den rigtige replace være: nnavn = nnavn.replaceAll("'","\\'") nadresse = nadresse.replaceAll("'","\\'")
Men det er et forkert approach. Den rigtige løsning hedder PreparedStatement !
PreparedStatement pstmt = con.prepareStatement("UPDATE tabel SET navn = ?, adresse = ? WHERE bruger_id = ?"); pstmt.setString(1, m.getNavn()); pstmt.setString(2, m.getAdresse()); pstmt.setInt(3, m.getBruger_id()); så sætter JDBC driveren selv de \ ind hvor det er nødvendigt.
Sjovt jeg slet ikke er stødt på PreparedStatement. Det er vel også at foretrække ved INSERT og SELECT? I kan begge lægge at svar. Da problemet også kunne løses med replaceAll.
arne_v >> Jeg viste faktisk ikke, at prepared statement gjorde det selv, men endnu en god grund til, at bruge Dem:)
prepared statement: * undgår problemer med tekst strenge med ' i - normale - ondsindet SQL injection * undgår dato formats problemer * muliggør bruge af binære data (billeder etc.) * vil i mange tilfælde give bedre performance
Kurser inden for grundlæggende programmering