Autor Zpráva
lionel messi
Profil
Zdravím,

dnes som narazil na pre mňa neštandardné správanie funkcie mysqli_fetch_assoc. Zdá sa, akoby táto funkcia „nefungovala“ v cykle. Mám takýto kód:

$query = mysqli_query($link, "SELECT * FROM tabulka"); //ilustračne, viem, že * v SELECTE je pomalá
while ($row = mysqli_fetch_assoc($query))
{
  var_dump($row); //vráti NULL a vnútri cyklu vôbec nemôžem pristupovať k $row (bez ohľadu na to, či tam var_dump nechám alebo vymažem
}

Keď to však spravím bez cyklu, funguje zmienená funkcia vynikajúco:

$query = mysqli_query($link, "SELECT * FROM tabulka");
$row = mysqli_fetch_assoc($query);
var_dump($row); //vráti array s očakávanými kľúčmi a hodnotami, k $row sa dá bez problémov pristupovať

var_dump($query); v oboch prípadoch vráti objekt s očakávanými údajmi, tu chyba nie je, rovnako ani „vyššie“ v kóde (pripojenie k db…).

Ďakujem veľmi pekne za odpoveď.
Micruss
Profil
a mysqli_fetch_array funguje? jinak já tam chybu nvidím o.o
Fisir
Profil
Reaguji na lionela messiho:
Ještě bych zkusil objektový přístup (dá se mixovat s procedurálním), ale zrovna přesně tohle je uvedeno v PHP manuálu, takže je to nejméně podezřelé (pokud jsi nám tedy opravdu poslal celý kód).
Alphard
Profil
Testujete to přímo kódem uvedeným v [#1], nebo je to jen ukázka? Kdyby byl třeba za while chybně umístěn středník, chovalo by se to tak, jak popisujete. Hledal bych nějakou chybu okolo.
quatzael
Profil
lionel messi:
Máš v tom řádku s: while ($row = mysqli_fetch_assoc($query)) opravdu proměnnou $query shodující se s názvem proměnné obsahující ten SQL dotaz?


lionel messi:
Vždyť Ti tam chybí mysqli_query!!


EDIT: Nechybí, já jsem už nějak úplně slepej..
lionel messi
Profil
Alphard:
Kdyby byl třeba za while chybně umístěn středník, chovalo by se to tak, jak popisujete.
Napokon bola príčinou problému skutočne nesprávne umiestnená bodkočiarka za while, kt. mi samozrejme "v predstihu" ukončila cyklus. Ospravedlňujem sa za mystifikáciu problému, kt. vznikla tým, že kód uvedený v [#1] som písal z hlavy a tam som (správne, ale nezodpovedajúc skutočnému stavu skriptu) za while bodkočiarku neuviedol (nepoužil som CTRL+C/V z inkriminovaného skriptu).

Ešte raz ďakujem za všetky odpovede.
Kubo2
Profil
Citujem lionela messiho:
kt. mi samozrejme "v predstihu" ukončila cyklus.

Nie, ak si to rozoberieš, cyklus sa vykonal správne, ibaže jeho telo bolo tvorené jediným prázdnym príkazom. Cyklus sa vykonal toľkoráz, koľko bolo v spomínanej tabuľke riadkov, a po poslednom riadku funkcia mysqli_fetch_assoc už vrátila NULL, pretože ďaľší riadok result-set už neobsahoval. Hodnota NULL sa priradila do $row, celý výraz sa vyhodnotil ako NULL, ktorý sa v podmienke while(...) vyhodnotil ako false a vzápätí sa vykonal platný PHP blok príkazov { } obsahujúci jediný príkaz — volanie funkcie var_dump. A ten ti vypísal pravdivú hodnotu premennej $row — NULL.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: