Foros del Web » Programando para Internet » PHP »

mysql_fetch_?¿?¿?

Estas en el tema de mysql_fetch_?¿?¿? en el foro de PHP en Foros del Web. Buenas gente. A continuacion os voy a plantear una mera duda teorica. Desde que empece a usar php(no hará más de un mes), siempre he ...
  #1 (permalink)  
Antiguo 14/02/2006, 12:12
Avatar de keroveros  
Fecha de Ingreso: febrero-2006
Mensajes: 55
Antigüedad: 18 años, 1 mes
Puntos: 0
mysql_fetch_?¿?¿?

Buenas gente.

A continuacion os voy a plantear una mera duda teorica.

Desde que empece a usar php(no hará más de un mes), siempre he utilizado para tratar a los datos obtenidos de una sentencia SQL la funcion mysql_fetch_object().

Pero los pocos dias que llevo perteneciendo a esta comunidad, he visto que la mayoria usais mysql_fetch_array() y en menor numero la funcion mysql_fetch_row() (de esta ultima no estoy muy seguro).

Hasta donde he logrado entender por mi mismo, creo que mysql_fetch_array() hace que puedas tratar los datos como una array asociativa ($array['Nombre_Campo']=Valor.) Y mysql_fetch_row() como una array simple ($row['Numero_posicion_campo']=Valor).

¿Hasta que punto son ciertas mis conclusiones?, ¿Deberia usar mysql_fetch_array() en vez de mysql_fetch_object(),? ¿Por que?...

Es algo que llevo varios dias dandole vueltas..

Gracias como de costumbre.

Salu2
  #2 (permalink)  
Antiguo 14/02/2006, 12:16
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años
Puntos: 33
De acuerdo

Pues mira. yo creo que muchos estaran de acuerdo conmigo... es a gusto del programador.. normalmente usas las función con la que mas te acomodas para trabajar con la información del query.
  #3 (permalink)  
Antiguo 14/02/2006, 12:20
Avatar de keroveros  
Fecha de Ingreso: febrero-2006
Mensajes: 55
Antigüedad: 18 años, 1 mes
Puntos: 0
A mi la verdad es q me va bien con mysql_fetch_object() pero de verdad que me quede un poco mosca al ver los scripts que llevo vistos en esta comunidad, en los que el 90% usan fetch_array()...

Agradezco tu opinio, y sin animo de ofender, me gustaria escuchar otras, porque creo que si tanta gente la usa será por algo que desconozco.

Salu2 & Thx
  #4 (permalink)  
Antiguo 14/02/2006, 12:22
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 7 meses
Puntos: 2
Como tu dices, mediante $row=mysql_fetch_array($consulta) puedes acceder luego a los campos mediante $row["campo1"] ya que esta funcion forma una matriz asociativa (se puede acceder mediante sus indices asociativos (nombres de los campos) o sus indices numericos (posiciones de los campos)).
Con $row=mysql_fetch_row($consulta) accederás a los campos únicamente por su indice numérico (posición) por ejemplo $row[0], y por último, con mysql_fetch_object lo devuelto ya no es una matriz, sino un objeto, al cual para acceder a sus campos lo haces unicamente mediante sus indices asociativos.

Personalmente, la experiencia me ha hecho usar siempre mysql_fetch_row debido a que cuando tienes una gran cantidad de campos, esta resulta ser algo mas rápida que sus compañeras. La página de PHP dice:
Cita:
La función mysql_fetch_array() no es significativemente mas lenta que mysql_fetch_row(), sin embargo tiene un valor añadido importante.
Y es bastante cierto ese párrafo, lo podrás comprobar tu mismo.

Mas info en :
php.net/mysql_fetch_array
php.net/mysql_fetch_row
php.net/mysql_fetch_object

En fin, espero haber aclarado tus dudas.
Saludos.
__________________
R4DS en español | R4DS en inglés
  #5 (permalink)  
Antiguo 14/02/2006, 12:45
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 7 meses
Puntos: 2
Lo que me olvidé de comentarte es que como contraparte, si tienes una aplicacion que utiliza una base de datos con unos 30 campos (para poner un ejemplo), y después de un tiempo el desarrollador decide que es necesario agregar dos campos al comienzo de la base de datos, si has usado mysql_fetch_row tendrías que modificar numerito por numerito, y en cambio si usaste mysql_fetch_array usando sus indices asociativos no tienes que hacer todo ese trabajo adicional, ya que los nombres se mantienen constantes.

Un saludo.
__________________
R4DS en español | R4DS en inglés
  #6 (permalink)  
Antiguo 14/02/2006, 12:51
Avatar de keroveros  
Fecha de Ingreso: febrero-2006
Mensajes: 55
Antigüedad: 18 años, 1 mes
Puntos: 0
Muchas gracias zaqpz, mis dudas han sido totalmente aclaradas.

La verdad es que comprendo porque usan array en vez de object, tienen el mismo tratamiento ademas del numerico..

THX & Salu2
  #7 (permalink)  
Antiguo 14/02/2006, 12:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Se les olvidó mysql_fetch_assoc() que genera un array asociativo sólo ..

Es decir ... xxxx_fetch_array() como ya han comentado es accesible su resultado por indice asociativo o numérico .. y luego están las otras alternativas: xxx_fetch_row() para acceder por indice numérico o sólo por indice asociativo con xxx_fetch_assoc() ...

Yo ahora ya no uso directamente xxx_fetch_xxx() por qué uso "capas de abastracción de base de datos" (como ezSQL en mi caso ... podría ser ADOdb o cualquier otra ...). Pero teóricamente por rendimiento de las funciones sería recomendable usar la función directa en función (valga la rebundancia) de como acedamos al resultado. Por un tema de facilitar la lectura del código se suele acceder en forma "asociativa" .. por ende lo recomendable en ese caso sería: xxx_fetch_assoc() .. Pero si tienen infinidad de campos .. tal vez les venga mejor hacer referncia por posición (con xxx_fetch_row()).

Si usan POO (Programación orientada a objetos) lo más natural sería que devuelvan el resultado como un objeto ..

Como en todo .. diferencias tendrá que existir (sino no existirían tantas funciones "fetch", no creen?) eso sí .. que para la mayoría de casos el consumo extra de recursos o proceso en general sea despreciable .. eso será otro tema.

(Yo mismo ando aquí recomendando "xxx_fetch_assoc()" y luego hago ejemplos con "xxx_fetch_array()" .. pero tambien es cierto que a veces no sabes com van acceder al resultado .. por eso "xxx_fetch_array()" daría lo mismo como lo hagan).

Un saludo,
  #8 (permalink)  
Antiguo 14/02/2006, 13:19
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Cita:
Iniciado por mauled
Pues mira. yo creo que muchos estarán de acuerdo conmigo... es a gusto del programador.. normalmente usas las función con la que mas te acomodas para trabajar con la información del query.
Sr mauled, esto es el gran error, lee el manual y verás lo errado que estás!


Añadiendo a lo leído, es conveniente si son pocos campos usar mysql_fetch_row(), ya que mysql_fetch_array() es un híbrido entre mysql_fetch_row(), y mysql_fetch_assoc(), pudiendo acceder a él de manera associativa o por indices. También hay un segundo parámetro opcional para mysql_fetch_array() que es una constante, la cual indica que tipo de índice crear (si es doble ocupa mas memoria).
El mysql_fetch_object esta bueno usarlo en consultas pequeñas, y no le veo finalidad si no se trabaja en OOP (como se dijo).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 14/02/2006, 13:40
Avatar de keroveros  
Fecha de Ingreso: febrero-2006
Mensajes: 55
Antigüedad: 18 años, 1 mes
Puntos: 0
Una vez más gracias, Cluster y zaqpz.

Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:02.