Autor Zpráva
Martin02
Profil
Ahoj, chci se zeptat, proč mi toto normálně funguje?
$result = mysql_query("SELECT * FROM web_pages");
            while($r = mysql_fetch_assoc($result)) {
              echo 'a';
            }

A toto se mi zacyklí?
while($r = mysql_fetch_assoc(mysql_query("SELECT * FROM web_pages"))) {
              echo 'a';
            }

V podstatě jdeo úplně ten samý kód.. Děkuji
Joker
Profil
Martin02:
Protože ten cyklus pokaždé načte jenom první řádek.
(V každém cyklu se znovu provede ten dotaz a načte první řádek. A tak pořád dokola.)
Monkeys
Profil *
Martin02:
Tiez som raz omylom spravil tuto chybu a vysledok bol ze sa mi zamkla cela databaza a musel som restartovat pc.

M.
Alphard
Profil
Joker [#2] nezdůraznil příčinu. Výsledek navrácený mysql_query() v tomto případě není jednoduchý skalár, pak by skutečně oba kódy v [#1] byly ekvivalentní, ale resultset, který si lze přibližně představit jako pole, nad kterým lze konečně iterovat.

Podobně pro pole:
$array = range(1, 10);
while (list($key, $value) = each($array))
    echo $value;
a
while (list($key, $value) = each(range(1, 10)))
    echo $value;

Kromě toho nedoporučuji pracovat s mysql_query(), je deprecated a v dalších verzích bude zrušeno, vyberte si jinou extenzi.
peta
Profil
$result = mysql_query("SELECT * FROM web_pages"); // vytahni data z mysql 1x
            while($r = mysql_fetch_assoc($result)) { // vytahni z $result radek, opakuj, dokud mas radek
              echo 'a';
            }

while($r = mysql_fetch_assoc(mysql_query("SELECT * FROM web_pages"))) {
              echo 'a';
            }
//opakuj (vytahni radek (vytahni z mysql))
// cili z mysql vytahnes data, z toho vytahnes prvni radek a pak to cele zopakujes, pozadas o vsechny radky a vytahnes prvni z nich a tak porad dokola.
Martin02
Profil
peta:
Konečně, díky tobě jsem to pochopil. Díky moc.

Alphard:
A co jiného bych měl používat místo mysql_query?
pcmanik
Profil
Martin02:
Extenziu mysqli.
Monkeys
Profil *
pcmanik:
Alebo PDO

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:

0