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š

[Link mogu videti samo ulogovani korisnici]

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. [Link mogu videti samo ulogovani korisnici] [Link mogu videti samo ulogovani korisnici] [Link mogu videti samo ulogovani korisnici] se ubacuju u bazu bez problema dok na primer elitesecurity i [Link mogu videti samo ulogovani korisnici] 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 1109 korisnika na forumu :: 75 registrovanih, 11 sakrivenih i 1023 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: Ageofloneliness, alternator, Apok, Asparagus, awathorn, babaroga, Bacac, bojank, bolimejoli, ccoogg123, Dado78, Dekanovic, Denaya, dj.ape, drale12, Drugsparrow, EXIT78, filiphr, FOX, HPkopun, ikan, Istman, jodzula, Jose, Kawasaki1000, kendzo-andzo-boni-fju, Kobrim, Kozi-RS, kuntalo, kybonacci, lacko, laurusri, lcc, Lester Freamon, Lucije Kvint, Marko Marković, Maruti, mikrimaus, milenko crazy north, Milo97, Mrav Obrad, nemkea71, Nobunaga, nuke92, Orijen, Paklenica, precan, Profesor_018, promajauglavi, redstar011, royst33, S2M, sonico, Srki94, stalker22, suton, TangoSix, Tas011, The Boss, Token, tritonus, TRZH92, tvlada, V-98, vasa.93, Velizar Laro, Vlada78, Vlado82, Vojkan Petrovic, x011, Yellow Pinky, yiyi, Zedi100, Zorge, Zrcalo