Portál AbcLinuxu, 9. května 2025 23:34

Dotaz: Nefungujici metoda objektu DB

25.8.2009 09:16 Mr.S1lent.cz
Nefungujici metoda objektu DB
Přečteno: 163×
Odpovědět | Admin

Zdravim, mam objekt http://pastebin.com/m205ca6a1 a pozoruji na nem zvlastni chovani...

 

Nekde v kodu jsem pouzil tento zapis:

 

$query = DB::query( $sql );

$numb = DB::workup( $query, _num_rows );

pricemz vystup byl v poradku - dle kontroly pres db rozhrani

 

ale pote jsem metodu workup volal s parametrem _fetch_array stejne jako predhozim zpusobem, pozadovana promenna se nevyplni a pritom se nezachyti zadna vyjimka, kdyz to ale udelam takhle:

 

$query = DB::query( $sql );

$link = mysql_fetch_array( $query );

tak promenna $link obsahuje to, co ma...

 

Jsem bezradny, nedokazali mi zatim poradit ani nejvetsi php guru - asi ne, ze nevedeli, ale zrejme proto, ze nemeli cas o tom poradne premyslet, tak jsem to hodil sem.

Moc dekuji predem za odpoedi :-)

 

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.8.2009 15:04 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: Nefungujici metoda objektu DB
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co to sakra je? Ani se nedivím, že ti "php guru" neporadili. Nebo bůh ví, kdo ti php guru byli, když dobrovolně používáš takovýto kód. A ten eval, to je taková třešnička na dortu.

Když to uděláš takhle, tak ti to také funguje?
$query = DB::query( $sql );
mysql_fetch_array( $query );
$link = mysql_fetch_array( $query );
Protože to je přesně to, co ta dynamická šílenost dělá.
25.8.2009 15:22 Mr.S1lent.cz
Rozbalit Rozbalit vše Re: Nefungujici metoda objektu DB

Ano, takhle mi to funguje... Troufl bych si rict, ze tam dela "bordel" jen ten mysql_fetch_array, ponevadz, kdyz to prubnu s mysql_num_rows napr., tak to projde a vyhodi to jednicku :-) Ale porad mi unika, co mam spatne... Potreboval bych to nejak rozchodit :-/

25.8.2009 15:31 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: Nefungujici metoda objektu DB
Tak ještě jednou. Když si zavoláš mysql_fetch_array ručně, z výsledku SQL dotazu se vezme jeden řádek a ten se ti vrátí. Když použiješ to automagické DB::workup($query, _fetch_array), tak se mysql_fetch_array zavolá jednou, výsledek se zahodí (tj. přijdeš o ten jeden řádek) a pak se mysql_fetch_array zavolá podruhé a teprve tento výsledek se ti vrátí. Takže při použití DB::workup($query, _fetch_array) přijdeš o každý lichý řádek.

Rozdíl mezi mysql_fetch_array a mysql_num_rows je ten, že mysql_num_rows můžeš volat kolikrát chceš za sebou a vždy vrací stejný výsledek; naopak funkce mysql_fetch_array má vedlejší účinky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.