On Sat, 02 Feb 2002 01:02:50 +0100, -Martin- <admin@natten-i.dk>
wrote:
>mysql_fetch_array()
>eller
>mysql_fetch_assoc()
Forestil dig at du select'er "navn, adresse, email" ud.
$row = mysql_fetch_row() vil returnere et numerisk array:
[0] => "Peter Brodersen",
[1] => "Vanløse",
[2] => "professionel@nerd.dk"
$row = mysql_fetch_assoc() vil returnere et associativt array:
['navn'] => "Peter Brodersen",
['adresse'] => "Vanløse",
['email'] => "professionel@nerd.dk"
$row = mysql_fetch_array() vil returnere begge dele:
[0] => "Peter Brodersen",
[1] => "Vanløse",
[2] => "professionel@nerd.dk",
['navn'] => "Peter Brodersen",
['adresse'] => "Vanløse",
['email'] => "professionel@nerd.dk"
mysql_fetch_array() vil således have dataen liggende to gange i
hukommelsen. Typisk vil det ikke have noget at sige.
mysql_fetch_array() har dog ændret sig lidt i løbet af tiden, og kan,
hvis man foretrækker det, som andet argument tage MYSQL_ASSOC,
MYSQL_NUM eller MYSQL_BOTH (hvilket er default) for at kunne fungere
som de øvrige funktioner.
I praksis er der ubetydelig lidt forskel. Følgende er et par tilfælde,
hvor det kan være relevant at vælge andet end mysql_fetch_array:
- Hvis et af felterne har et stort output (fx en 2MB-blob), vil
mysql_fetch_array altså have det liggende to gange i hukommelsen
(udover i resultsettet for ens mysql_query i første omgang). I sådanne
tilfælde bør man ikke gemme værdierne to gange. Under normale
omstændigheder (som fx i mit tilfælde) vil det vitterligt være
ubetydeligt.
- Hælder man foreach() eller each() på det array, mysql_fetch_*
returnerer, vil mysql_fetch_array altså have dataen liggende to gange,
og man vil walk'e over indholdet to gange.
- Hvis ens query indeholder felter med samme navn (fx to felter, der
begge hedder 'id'), vil kun det sidste felt blive lagt med i det
associative array, hvor det kan være en fordel at bruge det numeriske
indeks, eller alternativt lave et alias. Som manualen nævner:
http://dk.php.net/manual/en/function.mysql-fetch-array.php
==
If two or more columns of the result have the same field names, the
last column will take precedence. To access the other column(s) of the
same name, you must use the numeric index of the column or make an
alias for the column.
==
Selv bruger jeg typisk mysql_fetch_array() (selvføgelig med ovennævnte
tilfælde som undtagelser), da det er min erfaring at folk, der kun
sporadisk bruger PHP, netop stopper op og spørger hvad
mysql_fetch_assoc() gør :) - og ellers blot mysql_fetch_row, hvis jeg
fx blot list'er outputtet direkte ud i strings. Men det er nok mere et
spørgsmål om vane.
--
- Peter Brodersen