Avatar billede tmo Nybegynder
06. april 2005 - 10:43 Der er 20 kommentarer og
1 løsning

insert semicolon

Hej,

Er der en funktion i MySql til at indsætte et semicolon eller skal jeg selv skrive en parser til at lave escape sequence?

insert into table xxx(xx)  VALUES('hanne's kaffebar');

tmo
Avatar billede barklund Nybegynder
06. april 2005 - 10:45 #1
Semikolon? Hvor skal du have det ind henne?

Og drejer det sig ikke bare om, at du skal have escapet din ' i din streng?
Avatar billede detox Nybegynder
06. april 2005 - 10:46 #2
Du mener vel apostrof:

insert into table xxx(xx)  VALUES('hanne\'s kaffebar');
Avatar billede bromer Nybegynder
06. april 2005 - 10:46 #3
insert into table xxx(xx)  VALUES('hanne\'s kaffebar;');

så er der indsat et semicolon ";". Men jeg regner med at du vil escape din "'" med "\'"..
Avatar billede bromer Nybegynder
06. april 2005 - 10:46 #4
klamt er I er to der når der først.. få jer et liv :)
Avatar billede tmo Nybegynder
06. april 2005 - 10:47 #5
ja, sry
Avatar billede tmo Nybegynder
06. april 2005 - 10:48 #6
Det handler om at indsætte 1880'erne hanne's osv.
Avatar billede bromer Nybegynder
06. april 2005 - 10:49 #7
Men du kan smide \ foran ' så det bliver \'
Avatar billede tmo Nybegynder
06. april 2005 - 10:51 #8
ja, men skal jeg selv gøre det eller findes der en funktion i Mysql til at gøre dette?
Avatar billede bromer Nybegynder
06. april 2005 - 10:53 #9
Problemet opstår når du laver din query, hvor du benytter ' til at afgrænse en streng. Du skal derfor gøre det i skridtet før i det scriptsprog du benytter (hvis du benytter et).
Avatar billede detox Nybegynder
06. april 2005 - 10:53 #10
Ikke i MySQL så vidt jeg ved, men du må kunne gøre det i din applikation; php, ASP, whatever. Hvad bruger du?
Avatar billede tmo Nybegynder
06. april 2005 - 10:54 #11
ok, bruger java
Avatar billede bromer Nybegynder
06. april 2005 - 10:54 #12
i C API'et hedder den funktionen nu til dags mysql_real_escape_string()
Avatar billede barklund Nybegynder
06. april 2005 - 10:54 #13
Det skal gøres udenfor - når det er kommet ind i SQL er der en fejl i det - du kan ikke skrive strengen 'hanne's kaffebar' i sql og få den til at arbejde på den - for det er ikke en gyldig SQL streng.

Det skal gøres i det omliggende software, som du måtte arbejde med.

Du kan bruge C API funktionen mysql_escape_string[1]. Den er muligvis også til rådighed, hvor du arbejder :)

[1] http://dev.mysql.com/doc/mysql/en/mysql-escape-string.html

--
Morten Barklund
Avatar billede bromer Nybegynder
06. april 2005 - 10:56 #14
barklund: man bør benytte mysql_real_escape_string() istedet for mysql_escape_string
Avatar billede tmo Nybegynder
06. april 2005 - 11:00 #15
har fundet det samme, laver selv en parser.
Avatar billede arne_v Ekspert
06. april 2005 - 11:08 #16
Hvis du bruger Java, så glem alt om escape string.

Løsningen er at bruge PreparedStatemement !
Avatar billede arne_v Ekspert
06. april 2005 - 11:09 #17
PreparedStatement pstmt = con.prepareStatement("INSERT INTO xxx(xxx) VALUES (?)");
pstmt.setString(1, s); // og her kan s indeholde en million single quotes tegn
pstmt.executeUpdate();
Avatar billede tmo Nybegynder
06. april 2005 - 11:34 #18
har set det. Det bliver klart noget i den stil.
Avatar billede tmo Nybegynder
06. april 2005 - 12:16 #19
hej arne

Følgende virker super. Jeg anteger at stmt.setEscapeProcessing(true); ikke er nødvendigt, da den default er true(fremgår ikke helt klart af api).

smid et svar

  PreparedStatement stmt=con.prepareStatement("insert into posting  (content,user_id,thread_id) values(?,?,?)");
          stmt.setEscapeProcessing(true);
          stmt.setString(1, content);
          stmt.setString(2, userId);
          stmt.setString(3, threadId);
Avatar billede arne_v Ekspert
06. april 2005 - 12:20 #20
Den er helt overflødig.

og svar
Avatar billede tmo Nybegynder
06. april 2005 - 12:21 #21
tak
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
Computerworld tilbyder specialiserede kurser i database-management

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