Avatar billede ferrari_brian Nybegynder
01. august 2006 - 11:07 Der er 11 kommentarer og
1 løsning

addslashes funktion i c++

Hej alle

Jeg har nogle strenge der skal indsættes i en MySQL database, denne del har jeg styr på, og den kan sagtens smide det hele i.

Men nogle af strengene indeholder også \ og lignende, som jo er escape karakterer. Dette være sig stier osv. Derfor vil jeg gerne vide om hvordan at jeg kan fx erstatte alle \ med \\ ?
Avatar billede panch Nybegynder
01. august 2006 - 11:23 #1
Hej,

Hvis du sender en streng "\\" opfattes den kun som "\" af den modtagende instans. Så ja det burde du kunne.
Avatar billede ferrari_brian Nybegynder
01. august 2006 - 11:33 #2
ja det ved jeg ... men hvordan får jeg i C++ konverteret alle \ til \\ ?
Avatar billede arne_v Ekspert
01. august 2006 - 13:10 #3
de venlige folk hos MySQL har lavet en funktion til det !

http://dev.mysql.com/doc/refman/5.0/en/mysql-real-escape-string.html
Avatar billede ferrari_brian Nybegynder
01. august 2006 - 13:13 #4
takker arne... det tror jeg lige jeg vil kigge på ... hvis jeg da kan få det til at virke!
Avatar billede arne_v Ekspert
01. august 2006 - 13:19 #5
jeg antager at du bruger MySQL C API eller en C++ wrapper omkring det
Avatar billede ferrari_brian Nybegynder
01. august 2006 - 13:34 #6
hmm... Jeg gør følgende


opretter:

  MYSQL *handle;
  MYSQL_RES *result;
  MYSQL_ROW row;


tilslutter:

  handle= mysql_init(NULL);
  if(handle == NULL)
  {
    printf("MySQL error: %s", mysql_error(handle));
    exit(1);
  }
  if(!mysql_real_connect(handle, AutoBuild.DbAddress, AutoBuild.DbUser, AutoBuild.DbPass, AutoBuild.DbName, 0, NULL, 0))
  {
    printf("MySQL error: %s", mysql_error(handle));
    exit(1);
  }


Udfører handlinger:

  ......
 

  if(!mysql_query(handle, Select)) // Select er en CString det samme bruges til insert


  ......
 

Lukker forbindelsen:

  mysql_close(handle);
Avatar billede arne_v Ekspert
01. august 2006 - 14:13 #7
yes - så skulle MySQL real escape string ligge lige til højrebenet
Avatar billede ferrari_brian Nybegynder
01. august 2006 - 14:47 #8
takker prøver det af
Avatar billede ferrari_brian Nybegynder
01. august 2006 - 15:59 #9
det virker... havde dog kigget på den, men andre så ud til at have så mange problemer (se linket) ... Derfor jeg lige spurgte her ... undskyld...

men Arne_v ... du kan få de points... !
Avatar billede arne_v Ekspert
01. august 2006 - 16:25 #10
svar
Avatar billede arne_v Ekspert
01. august 2006 - 16:35 #11
jeg kiggede lidt paa de kommentarer - typisk blogging:
  en havde et link problem i 2003
  flere mente at funktions signature burde andres
  flere mente at deres egen kode var meget bedre

ikke noget som afskraekker mig

og funktionen virker !

den bliver kaldt en million gange i time worldwide

ikke fra C++ men fra PHP

http://us3.php.net/manual/en/function.mysql-real-escape-string.php

citat:

This function must always (with few exceptions) be used to make data safe before sending a query to MySQL.

[og det er ret nemt at gaette hvilken C funktion den PHP funktion kalder]
Avatar billede ferrari_brian Nybegynder
01. august 2006 - 17:11 #12
Tak igen ... jeg ved det... det burde jeg også have tænkt selv... men sidder vist og kager lidt i det her i varmen ... men hva... det virker... og den laver ikke fejl mere... :) takker!
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