C++, MySQL, Threads...

C++, MySQL, Threads...

offline
  • Pridružio: 11 Maj 2005
  • Poruke: 871
  • Gde živiš: Aleksinac - Niš

Moze li neko da mi opise kako da povezem MySQL i c++?
Video sam da uz MySQL dolaze i raznorazni header fajlovi, lib itd. ali sta mi je od toga potrebno?

Potreban mi je najprostiji kod da se povezem sa bazom i izvrsim upit.

Koliko je bezbedno koriscenje niti? Moze li doci do greske?

Da li za Visual studio (tj. win) postoji komanda kao pthread_join u Linuxu?

Da li postoji u c++-u komanda addslashes kao u php-u, koja dodaje backslash gde treba pre ubacivanja u bazu?

Inace imam Visual Studio 2005.

Unapred hvala.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

http://mysql.org/downloads/visual-studio-plugin/index.html

Da li je klasa thread safe - ne znam.

Za pthread_join postoji adekvatna zamena medju WinAPI funkcijama.



offline
  • Pridružio: 11 Maj 2005
  • Poruke: 871
  • Gde živiš: Aleksinac - Niš

Nikako da mi upit za bazu proradi kako treba...
Naime u bazu ubacujem html a posto nisam nasao u c++-u funkciju koja dodaje backslashes pa sam napravio svoju koja samo dodaje \ ispred sledecih znakova:
' " \ NULL

Evo kako proveravam i ubacujem:
char *s1="'"; char *s2="\""; char *s3="\\"; for(i=0;i<n;i++)    {       if(s1[0]==mem.memory[i])       {          izlaz.ubaci("\\");       }           if(s2[0]==mem.memory[i])       {          izlaz.ubaci("\\");       }       if(mem.memory[i]==NULL)       {          izlaz.ubaci("\\");       }       if(s3[0]==mem.memory[i])       {          izlaz.ubaci("\\");       }       izlaz.ubaci(mem.memory[i]);    }

Ovo mem je struktura:

struct MemoryStruct {   char *memory;   size_t size; };

ali to nije ni bitno.
Problem je sto sve dobro radi kad unosim neke HTML stranice a za neke program puca. Npr. www.mycity.rs, www.google.com, www.php.net se ubacuju u bazu bez problema dok na primer elitesecurity i www.b92.net prave probleme. Program ih nekako i ubaci u bazu ali odmah nakon unosa puca i sto je najgore ne prijavljuje gresku a stavio sam sledeci kod da se osiguram:

sprintf_s(qbuf,INSERT_QUERY,nbr,url,iz1); if(mysql_query(sock,qbuf))    {       fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));       }

u qbuf promenljivoj se smesta upit i to sam proverio i ispada ok.

Napravio sam i slican kod u php-u samo za b92 i skinuto je bez problema tako da mislim da problem nije u bazi vec u ovoj mojoj addslashes funkciji.

Dopuna: 12 Feb 2007 12:04

Umalo da zaboravim...
Ovo je prosto ali me zbunjuje. Ne umem da izvucem podatak koji mi treba iz baze. Evo koda:
MYSQL_RES *res;    if(mysql_query(sock,COUNT_QUERY))    {       fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));    }    if (!(res=mysql_store_result(sock)))     {       fprintf(stderr,"Couldn't get result from %s\n",        mysql_error(sock));     }    int nbr=(int)res->row;
Ovde je COUNT_QUERY "SELECT COUNT(*) FROM table"
znaci samo da mi prebroji redove ali ono sto dobijam u promenljivoj res->row uopste nije to.

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

pazi, on nece da ti vrati 35 kolona, vec jednu kolonu, sa jednim redom, koji se zove verovatno "count(*)" i koji sadrzi vrednost 35.
mada je sigurnije da koristis count(id), ako je id index kolona... onda ce se polje zvati 'count(id)'

evo ti primer:
mysql> select count(user_id) from phpbb_users; +----------------+ | count(user_id) | +----------------+ |          52511 | +----------------+ 1 row in set (0.00 sec)

offline
  • Pridružio: 11 Maj 2005
  • Poruke: 871
  • Gde živiš: Aleksinac - Niš

Nasao sam funkciju mysql_real_escape_string() koja radi isto sto i addslashes ali sad mi program puca kod te funkcije.

unsigned long int l=strlen(mem.memory);    char *iz1=new char[l*2+1];    char *x=mem.memory;    mysql_real_escape_string(sock, iz1, x, l*2+1);

Probao sam i da sa mysql_set_character_set(&mysql, "utf8") promenim charset i opet nista.
Na stranici b92 pise: charset=windows-1250 pa sam zato probao i sa cp1250 charsetom...
Ima li neko ideju?

Ko je trenutno na forumu
 

Ukupno su 754 korisnika na forumu :: 8 registrovanih, 0 sakrivenih i 746 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: bojank, Koridor, LUDI, stegonosa, TheDictator, Valter071, wizzardone, šumar bk2