Avatar billede jonas82 Nybegynder
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?
Avatar billede kalp Novice
05. maj 2005 - 17:14 #1
sætte følgende foran

\\'

eller

//'
Avatar billede kalp Novice
05. maj 2005 - 17:15 #2
hvis igen af dem virker er det fordi der kun skal være en strej foran:)

altså

/'

eller

\'

men mener det er det andet.
Avatar billede jonas82 Nybegynder
05. maj 2005 - 17:17 #3
Men jeg ved jo ikke hvornår eller hvor den kommer.
Avatar billede busschou Praktikant
05. maj 2005 - 17:19 #4
Så bruger du str_replact til at erstatte ' med \' i dine variable inden du laver din sql sætning
http://dk.php.net/str_replace
Avatar billede kalp Novice
05. maj 2005 - 17:19 #5
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,"\\'")
Avatar billede busschou Praktikant
05. maj 2005 - 17:21 #6
doh du bruger selvfølgelig addslashes som selv sætter \ ind de rigtige steder :o)
http://dk.php.net/manual/en/function.addslashes.php
Avatar billede jonas82 Nybegynder
05. maj 2005 - 17:22 #7
Det er desværre Java busschou :-)
Avatar billede kalp Novice
05. maj 2005 - 17:22 #8
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;
Avatar billede busschou Praktikant
05. maj 2005 - 17:22 #9
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!
Avatar billede kalp Novice
05. maj 2005 - 17:23 #10
ps. hvis ikke det virker skal du bare lige ændre i de der \\' som foreslået.
Avatar billede jonas82 Nybegynder
05. maj 2005 - 17:23 #11
prøver.. :-)

helt ok busschou
Avatar billede kalp Novice
05. maj 2005 - 17:24 #12
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,"//'")
Avatar billede kalp Novice
05. maj 2005 - 17:28 #13
pis

alle skal lige rettes til

nnavn = nnavn.replaceAll(',"\'")
nadresse = nadresse.replaceAll(',"\'")

nnavn = nnavn.replaceAll(',"/'")
nadresse = nadresse.replaceAll(',"/'")

nnavn = nnavn.replaceAll(',"//'")
nadresse = nadresse.replaceAll(',"//'")
Avatar billede kalp Novice
05. maj 2005 - 17:29 #14
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;
Avatar billede jonas82 Nybegynder
05. maj 2005 - 17:35 #15
Tror der er syntax fejl i måden replaceAll bruges på.
Avatar billede kalp Novice
05. maj 2005 - 17:39 #16
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;
Avatar billede kalp Novice
05. maj 2005 - 17:39 #17
der skal lige nogle ; efter linjerne selvfølgelig.
Avatar billede kalp Novice
05. maj 2005 - 17:42 #18
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
Avatar billede jonas82 Nybegynder
05. maj 2005 - 17:50 #19
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.
Avatar billede arne_v Ekspert
05. maj 2005 - 18:13 #20
Hvis man vil escape så må den rigtige replace være:

nnavn = nnavn.replaceAll("'","\\'")
nadresse = nadresse.replaceAll("'","\\'")
Avatar billede arne_v Ekspert
05. maj 2005 - 18:13 #21
Men det er et forkert approach.

Den rigtige løsning hedder PreparedStatement !
Avatar billede arne_v Ekspert
05. maj 2005 - 18:16 #22
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.
Avatar billede arne_v Ekspert
05. maj 2005 - 18:18 #23
Og iøvrigt har PHP5/mysqli den samme feature - se http://dk.php.net/manual/en/function.mysqli-prepare.php
Avatar billede jonas82 Nybegynder
05. maj 2005 - 19:19 #24
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.
Avatar billede arne_v Ekspert
05. maj 2005 - 19:33 #25
ja

og svar
Avatar billede kalp Novice
05. maj 2005 - 19:34 #26
kommer her:)
Avatar billede kalp Novice
05. maj 2005 - 19:35 #27
arne_v >> Jeg viste faktisk ikke, at prepared statement gjorde det selv, men endnu en god grund til, at bruge Dem:)
Avatar billede arne_v Ekspert
05. maj 2005 - 19:35 #28
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
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
Kategori
Kurser inden for grundlæggende programmering

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