[Php-avanzado] Diferencias entre mysql_fetch_row mysql_fetch_assoc mysql_fetch_array

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Lun Dic 13 09:49:09 ARST 2010


Hola Carolina,

	lo que decís sobre estas 3 funciones es cierto, sin embargo,
mysql_fetch_array(...) no genera 2 vectores, sino un vector asociativo,
accesible por índice y por valor, que es "más grande" que un vextor
indizado, pero no tanto como dos vectores por separado.

	Por otra parte mysql_fetch_array(...) tiene un segundo parámetro
opcional y son las constantes  MYSQL_ASSOC, MYSQL_NUM y MYSQL_BOTH.
	Por default, con MYSQL_BOTH devuelve un vector indizado y asociativo,
con MYSQL_ASSOC un vector asociativo y con MYSQL_NUM un vector indizado,
con lo que tenés la misma funcionalidad de las 2 primeras funciones que
cita el artículo.

	Por otra parte, la web y el manual de PHP aclaran desde siempre:
"Performance: An important thing to note is that using
mysql_fetch_array() is not significantly slower than using
mysql_fetch_row(), while it provides a significant added value."...

	y dado el valor añadido que da el poder acceder a los resultados por el
valor, para tener una mejor semántica y código más claro, sumado a
racionalizar las querys para que devuelvan solo los campos que hacen
falta y no siempre SELECT * FROM Tabla para al final usar solo 1 o 2
campos, creo que se pierde más de lo que se gana al usar varias
funciones para la misma cosa, comparado con optimizar las querys.

	En fin: a veces acá en una locura de optimización, le pasamos un
MYSQL_ASSOC al mysql_fetch_array() y nos vamos a dormir con la alegría
del deber cumplido ;-)


PD: hay artículos interesantes por ahí que ilustran sobre las
desventajas de optimizar en etapas tempranas del desarrollo. Los recordé
al escribir todo esto.


El sáb, 11-12-2010 a las 16:38 -0300, Silverzero escribió:
> Es interesante conocer las diferencias de estas 3 funciones php a la
> hora de programar nuestras webs.
> 
> mysql_fetch_row
> Devuelve un array con índices núméricos para los campos. Ejemplo:
> 
> $fila = mysql_fetch_row(...)
> $fila[0], $fila[1], etc...
> 
> mysql_fetch_assoc
> Devuelve un array asociativo (cadenas como índices) para los campos.
> Ejemplo:
> 
> $fila = mysql_fetch_assoc(...), :
> $fila['campo_1'], $fila['campo_2'], etc...
> 
> mysql_fetch_array
> Devuelve un array con índices numéricos y asociativos.
> 
> $fila = mysql_fetch_array(...),
> 
> Conclusión, si lo que queremos es ahorrar en recursos podemos utilizar
> cualquiera de las 2 primeras funciones php, ya que la última
> “mysql_fetch_array” generá los 2 arrays de mysql_fetch_row y
> mysql_fetch_assoc.
> http://www.bufa.es/diferencias-mysql_fetch/
> -- 
> Carolina
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
-- 

Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado