Új hozzászólás Aktív témák

  • cucka

    addikt

    Itt válaszolok erre, mert tisztán php kérdés, semmi köze a mysql-hez.

    A while ciklus akkor áll meg, amikor a feltétele hamis lesz. Ez azt jelenti, hogy a php a feltételt boolean típusra cast-olja és megnézi, hogy egyenlő-e a boolean false értékkel.

    Normálisan valahogy így kell megírni egy ilyen ciklust.

    $res=mysql_query("select * from tablanev");
    while (false !== ($row=mysql_fetch_assoc($res)){
    //itt a ciklus magja
    }

    Az történik, hogy (jobbról balra, belülről kifele haladunk):
    1. A mysql_fetch_assoc visszatér egy tömbbel vagy boolean false értékkel, amennyiben nincs több sor. Tehát nem ad vissza 1-et meg nullát, hanem mindig a mysql resourse-hoz tartozó következő sort adja vissza asszoc. tömbként. Ha nincs több sor, akkor false-al tér vissza.
    2. Az értékadás művelete mindig arra értékelődik ki, ami az értékadás jobb oldalán van, tehát jelen esetben a mysql_fetch_assoc visszatérési értékére.
    3. A false !== rész megvizsgálja, hogy a mysql_fetch_assoc boolean false értékkel tér-e vissza. Ezt le lehet spórolni, de célszerű így megszokni. Probléma akkor lehet, ha a mysql_fetch_assoc üres tömbbel tér vissza, ami boolean-ra cast-olva false értéket ad. A mysql_fetch_assoc soha nem fog üres tömbbel visszatérni, de ha mondjuk saját adatbázis kezelő osztályt írsz, akkor előfordulhat.

    A következő kódod pedig totál rossz:

    $result = mysql_fetch_assoc($query) or die ("Para van!")

    Itt akkor fog lefutni a die, ha a mysql_fetch_assoc visszatérési értéke == boolean false. (Tehát nincs típusellenőrzés). Gyakorlatilag ha nincs egyetlen sor sem a táblában, akkor lefut a die.

    A fenti sor ekvivalens a következővel.

    $result=mysql_fetch_assoc($query);
    if ($result==false) die("Para van");

Új hozzászólás Aktív témák

Hirdetés