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 |
#2 · Zasláno: 16. 7. 2014, 21:56:41
a mysqli_fetch_array funguje? jinak já tam chybu nvidím o.o
|
||
Fisir Profil |
#3 · Zasláno: 16. 7. 2014, 22:41:54
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 |
#4 · Zasláno: 16. 7. 2014, 23:22:34
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 |
#5 · Zasláno: 16. 7. 2014, 23:58:37 · Upravil/a: quatzael
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 |
#6 · Zasláno: 18. 7. 2014, 23:06:18
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 |
#7 · Zasláno: 18. 7. 2014, 23:45:48
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. |
||
Časová prodleva: 10 let
|
0