/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
mysql_fetch_???
Fra : -Martin-


Dato : 02-02-02 01:03

Hvilken er mest rigtig af bruge ?

mysql_fetch_array()
eller
mysql_fetch_assoc()

og hvorfor ?

som jeg kan læse mig frem til i manualen så er det indentitiske? eller
mig der er for træt til at læse

 
 
Peter Brodersen (02-02-2002)
Kommentar
Fra : Peter Brodersen


Dato : 02-02-02 10:28

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

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408939
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste