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: 23083
  • 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: 23083
  • 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 885 korisnika na forumu :: 51 registrovanih, 11 sakrivenih i 823 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 5.56, _Petar, ankebut, Apok, bojank, Boris902, calvi, Denaya, Dimitrise93, dragoljub11987, Drug pukovnik, Duško, ekser222, eulereix, filiphr, Hektor2, hyla, Ilija Cvorovic, Insan, ivica976, Kubovac, louderick, Marko Marković2, marsovac 2, MB120mm, Metanoja, Milos ZA, Mirage 2000N, Mixelotti, mushroom, nemkea71, neno panic, nighthawk, Nikola3332, Panonsky, Panter, powSrb, Rakenica, raketaš, S-lash, sakota79, Shomy, shone34, Sr.Stat., stegonosa, Viceroy2, virked, vladas87, vlvl, voja64, yufighter