Ionut Stoica

Programator PHP / Frontend developer / Pasionat de Electronica Auto
27Aug

mysql_fetch_array, mysql_fetch_assoc sau mysql_fetch_row ?

Probabil ca multe persoane, printre care si eu la inceputul drumului in programarea PHP, s-au intrebat care este diferenta intre aceste 3 functii si cand este bine sa folosim una si cand cealalta.

mysql_fetch_array intoarce atat cheile valorilor cat si numele campurilor din baza de date.
Ex:
SELECT `camp1`,`camp2` FROM `tabel` LIMIT 1;

va intoarce un array cu 4 elemente dupa cum urmeaza:

Array(
[0] = valoare1 ,
[camp1]=valoare1,
[1]=valoare2,
[camp2]=valoare2
)

Recomand folosirea acestei functii doar atunci cand join-urile intre mai multe tabele sunt complexe si numele campurilor din primul tabel se regasesc si in celelalte tabele.


mysql_fetch_assoc
va intoarce DOAR NUMELE CHEILOR impreuna cu valoarea.
acelasi query de mai sus va intoarce un array de genul:

Array(
[camp1]=valoare1,
[camp2]=valoare2
)

Aceasta functie este recomandata atunci cand avem join-uri multiple in tabele cu nume de campuri diferite cu posibilitatea de a se modifica structura tabelelor .

mysql_fetch_row va intoarce DOAR NUMARUL RANDULUI impreuna cu valoarea.
acelasi query de mai sus va intoarce un array de genul:

Array(
[0]=valoare1,
[1]=valoare2
)

Aceasta functie este recomandata atunci cand avem o baza de date cu tabele fixe sau join-uri simple care nu se modifica.

In aplicatiile simple mare diferenta in viteza de procesare nu se observa deoarece nu trebuiesc executate foarte multe interogari, dar pentru programe de procesare date ce foloseste intensiv MySQL-ul folosirea corecta a uneia dintre cele 3 functii + mysql_free_result dupa fiecare interogare inseamna procesare mai rapida cu consum mai mic de resurse.

Comments(1)
  • arcade
    Jan 15, 2011 at 1:27 am,  Reply

    None of the above. Recomand cu caldura mysql_fetch_object() pentru aproape orice use case scenario (mult mai usor de urmarit in cod deoarece genereaza un obiect cu numele coloanelor selectate ca proprietati), exemplu:

    $result = mysql_query(‘SELECT `culoare` FROM `masini`’);
    while($masina = mysql_fetch_object($result))
    {
    echo $masina->culoare . “\n”;
    }

    Cat despre cazul in care exista coliziuni de nume la selecturi exista intotdeauna varianta ‘AS’, exemplu:

    SELECT `produs`.`id` AS `IdProdus`, `furnizor`.`id` AS `IdFurnizor`
    FROM `produse`
    LEFT JOIN `furnizori` ON `furnizor`.`id` = `produse`.`furnizor`

Leave a comment

Your email address will not be published.Field is required

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 Previous  All works Next