» »

[C++/Mysql] problem z mysql_num_rows

[C++/Mysql] problem z mysql_num_rows

matijaz74 ::

Pozdravljeni!
Kot je v naslovu razvidno. Imam problem z to funkcijo. Kako naj izvem koliko vrstic je bilo izpisanih. Vem da vrne tip my_ulonglong. Poskusil sem tudi spremeniti v unsigned long vendar mi zmeraj pokaže 0.
sql = "SELECT * FROM test";
if(mysql_query(conn,sql)){
  // tu bi izpisal koliko je vrstic
}

Hvala vam za pomoč. Vse sem že pogledal preveril vendar nobena varjanta ni pravilna.
lp
Matijaž

mallard ::

Kako in kje pa kličeš mysql_num_rows()?

Tako, kot maš ti nastavljeno:
if(mysql_query(conn, sql)) {
    // do sem pridemo, če v mysql_query() pride do napake
}


Si morda mislil:
if (!mysql_query(conn, sql)) {
    // uspeh
}

matijaz74 ::

:)
Ja res je. Sem pozabil dodati klicaj.
V glavnem ...
sql = "SELECT * FROM test";
if(!mysql_query(conn,sql)){
  result = mysql_use_result(conn);
  if(mysql_num_rows(result)!=0){ <= to mi ne dela
    // rešitev
  }
}

Tako bo bolj razumljivo ... mislim. Hvala vam za odgovor.
lp
Matijaž

mallard ::

Tu med drugim piše:

If you use mysql_use_result(), mysql_num_rows() does not return the correct value until all the rows in the result set have been retrieved.


Torej, ali uporabi mysql_store_result() ali pa kliči mysql_fetch_row() dokler ti ne vrne NULL (šele potem boš dobil pravilno vrednost iz mysql_num_rows()).

Zgodovina sprememb…

  • spremenilo: mallard ()

matijaz74 ::

Hvala, mallard. Sem opazil ta stavek. Pa nisem razumel, kaj so hoteli s tem reči. Hmmm ... po mojem malo čudno deluje to. V PHP funkcija čisto drugače deluje. Da bom vedel koliko je izpisanih vrstic bom naredil COUNT v SQL-u bo bolje tako. Bom vsaj vedel ali je podatek notri ali ne, da imam razlog z vnos. Še enkrat hvala.
lp
Matijaž

Spura ::

Brezveze vlect celo tabelo iz baze samo zato da ugotovis koliko je vrstic.

Veron ::

^^ raje z sql stavkom COUNT preštej število vrstic, razen če še kaj drugega nardiš iz tega...

Zgodovina sprememb…

  • spremenil: Veron ()

AndrejS ::

Ne count zaganjat na veliki bazi! Odvisno kaj potrebuješ... malo obširneje opiši problem

matijaz74 ::

AndrejS je izjavil:

Ne count zaganjat na veliki bazi! Odvisno kaj potrebuješ... malo obširneje opiši problem


Kako pa bi ti preveril, ali je določeni podatek že v bazi ali ne? Jaz sem izvedel to tazadnjo varjanto in mi super deluje.
Problem je veliko večji. Namreč delam spletno aplikacijo. Želel sem samo prenesti podatke iz ogromne tekstovne datoteke (25MB) v bazo. Ker preko PHP in Mysql ni šlo. Zato sem se odločil, da naredil program v C++ z katerim bom razčlenil in prenesel podatke iz tekstovne datoteke v bazo. Če ima kdo boljšo rešitev mi prosim lahko napiše. Hvala, vam vseeno za pomoč in za dogovor.
lp
Matijaž

Spura ::

The fuck? Zakaj pa preko PHP ne gre?
A to kao da user submita tako datoteko, ali da to ti vsake toliko polnis bazo?

matijaz74 ::

:) Browser zablokira. Pa preko interneta to ne gre. DA sem se odločil za C++ je bila pametna rešitev. Sedaj deluje, kot je treba. Hvala!
lp
Matijaž

matijaz74 ::

aha ... sem pozabil odgovoriti. Še na eno vprašanje. Kot administrator da vsake toliko časa polnim bazo. :)
lp
Matijaž

Spura ::

Loooooool zakaj si pa pol preko neta to pocel? Sej PHP najbrz tudi lokalno dela, tako kot tvoj C++ programcek. Za preko neta bi se pa moral tega drugace lotit.

technolog ::

Spura je izjavil:

Loooooool zakaj si pa pol preko neta to pocel? Sej PHP najbrz tudi lokalno dela, tako kot tvoj C++ programcek. Za preko neta bi se pa moral tega drugace lotit.


Ne?

25 mega datoteka ni bavbav za noben današnji browser. Seveda je treba v phpju nastavt tiste max_upload_size flage.

Tam pri datoteki 1GB+ bi se jaz šele ukvarjal s takimi stvarmi.

Spura ::

A sem rekel da je velikost datoteke problem? Problem je ce ima taka datoteka 10000 vrstic za insertirat v bazo in potem browser timeouta. Ali pa se vsaj uporabniku zdi da predolgo traja in zapre (kar sicer tehnicno ni problem, samo z uporabniskega stalisca pa je).

Zgodovina sprememb…

  • spremenil: Spura ()

technolog ::

browser ne timeouta. timeouta server.

Rekel si, da insertaš v bazo ti, ne uporabnik.

Spura ::

Ne stekam kaj hoces povedat.

matijaz74 ::

Spura je izjavil:

Loooooool zakaj si pa pol preko neta to pocel? Sej PHP najbrz tudi lokalno dela, tako kot tvoj C++ programcek. Za preko neta bi se pa moral tega drugace lotit.


Mislil in nič vedel, da bo lahko to požrlo. Lokalno tudi ne gre. To je pa čisto odvisno od mašine. Mašina že prebere vrstico po vrstici datoteko. Če pa je baza zraven pa že ne zmore več. Seveda se lahko nastavi max_upload_size. Datoteka pa nima 10kvrstic amapak 200k vrstic. :) Potem mora še razrezati na posamezne podatke potem pa še v bazo insertat. Hmmm ... preveč. C++ program je lepo uredil in insertal v bazo. Tako bom sedaj preko neta poslal SQL skripto in insertal na strežnik (Ta ni lokalno).

Hvala, obema, problemček je rešen. :)
lp
Matijaž


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C - shranjevanje rezultatov iz baze v array

Oddelek: Programiranje
71220 (919) Randomness
»

PHP - header : javi napako

Oddelek: Izdelava spletišč
61306 (1261) Camel
»

[PHP]Zajem podatkov iz baze

Oddelek: Programiranje
354038 (3675) cobrica
»

PHP in JS problem :(

Oddelek: Programiranje
81719 (1527) l0g1t3ch
»

[c++] osnovna težava z mysql api

Oddelek: Programiranje
222057 (1696) SasoS

Več podobnih tem