Videoblogs




 

Resolviendo problemas con mysql_fetch_array



Visto: 5165 veces - Enviado por: Rhosting
Conversa sobre este tema

 

En ocasiones se presenta un error similar a este al programar: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home2/usuario/public_html/miprograma.php on line 38 . Generalmente la gente pregunta si debe configurar algo en el servidor para que todo comience a funcionar.  La respuesta es no. Hay un error en la programacion. Pero no te preocupes, aqui te damos ideas para resolverlo.

 

 

Leenos via RSS
Agendalo a tus Favoritos Favoritos 
Recomendalo Recomendalo

 

RH

 

Para saber más...

Tutorial de PHP.net sobre mysql_fetch_array
http://www.php.net/manual/es/function.mysql-fetch-array.php

Tutorial de PHP.net sobre mysql_query
http://www.php.net/manual/es/function.mysql-query.php

Tutorial sobre consultas SQL de Mysql Hispano:
http://www.mysql-hispano.org/page.php?id=31&pag=14

 

Como sabes, mysql_fetch_array es una funcion propia de php que se usa para mostrar valores extraidos de bases de datos en forma organizada. En forma de matriz para ser mas precisos.


Cuando se trabaja con esta funcion, generalmente se hace de esta manera:


$consulta=mysql_query("select CampoaMostrar from Tabla where Campo='$valor' order by Campo1",$datosdeconexion);

while($resultadosordenados=mysql_fetch_array($consulta)){


echo $resultadosordenados['CampoaMostrar'];


}


O sea, primero hacemos una consulta a la base de datos, usando la instruccion mysql_query y una instruccion en SQL ( en este caso select CampoaMostrar from Tabla where Campo='$valor' order by Campo1 ).


Luego pasamos todo a un while donde el mysql_fetch_array se encarga de ordenar los resultados, mientras haya resultados que ordenar.


El uso del while es opcional, dependiendo de si solo queremos llamar un registro o llamar varios registros.


Bien, pero, volviendo a la pregunta ¿Donde esta el problema que hace que aparezca esto: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home2/usuario/public_html/miprograma.php on line 38


Muy sencillamente, dentro de los parentesis despues de mysql_query. El mysql_fetch_array solo alerta del error pero el mismo esta en la linea anterior. Puede suceder que:


a) La consulta SQL este mal hecha. Que hayamos escrito algun campo que no pertenece a esa tabla; que hayamos escrito mal la sintaxis de la sentencia; que nos hallamos olvidado de algun caracter, algun punto, alguna coma o que hayamos colocado algunos caracteres como " ' = de mas.  Tambien es posible que el orden de las cosas en la consulta este mal. Por ejemplo, poner el order by antes del where ( existen muchas otras instrucciones en SQL como union, group by, outer join, group by y muchas otras que tienen un orden especifico de aparicion en la sentencia SQL - cuando corresponde usarlas - y que usadas en el lugar equivocado pueden causar este problema.) Te recomendamos leer los manuales sobre SQL que figuran en los enlaces, si estas usando alguna sentencia distinta a where y order by.


 


b) Que no figure la variable de conexion. Si nos fijamos en la consulta:


$consulta=mysql_query("select CampoaMostrar from Tabla where Campo='$valor' order by Campo1",$datosdeconexion);


Veremos que aparece la variable $datosdeconexion. Esta variable se usa si uno se conecta de esta forma a la base de datos:


function Conexion(){


$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');

if (!
$link) {

    die(
'No nos pudimos conectar' . mysql_error());

}

echo
'Conectado exitosamente';

return $link;


}


$datosdeconexion= Conexion();


Otras formas de conexion pueden hacer que la consulta funcione sin la variable de conexion.


 


c) Que la consulta este dentro de una funcion. En este caso, la variable de conexion deberia pasarse como uno de los argumentos de la funcion que contiene la consulta.


Por ejemplo, supongamos que tenemos este codigo:


function MiFuncion($variablequeusoenlafuncion){


$consulta=mysql_query("select CampoaMostrar from Tabla where Campo='$variablequeusoenlafuncion' order by Campo1",$datosdeconexion);

while($resultadosordenados=mysql_fetch_array($consulta)){


echo $resultadosordenados['CampoaMostrar'];


}


}


Como ves, le estamos pasando una sola variable a la funcion. Lo correcto seria reescribir esta linea:


function MiFuncion($variablequeusoenlafuncion){


Asi:


function MiFuncion($variablequeusoenlafuncion,$datosdeconexion){


 Para pasarle tambien la variable de conexion y que no haya problemas.


 


d) Comentar una linea clave por error. Muchas veces sucede que sin querer, borrando caracteres dos lineas que debian ir una abajo de la otra, terminan pegadas. Y si la linea superior es un comentario, partes clave de la consulta pueden verse truncadas.


Veamos un ejemplo, supongamos que alguien desea realizar esta consulta:


//aqui comento que en la proxima linea haré mi conexionmysql_connect("localhost","usuario","clave");$results=mysql_query("select

* from mensajes";$conexion);while ($row=mysql_fetch_array($results))


Como podemos ver, hemos abierto el comentario pero no dejado los saltos de linea correspondientes y eso ocasiona el error. Si estamos usando Dreamweaver por ejemplo, el color naranja seria una pista del error. Si el error no estuviera los colores deberian verse de esta forma:


//aqui comento que en la proxima linea haré mi conexion


mysql_connect("localhost","usuario","clave");


$results=mysql_query("select * from tabla",$conexion);

while ($row=mysql_fetch_array($results)){


Para evitar este error conviene usar programas de diseño como Dreamweaver, que marcan con colores el codigo, y familiarizarse con los colores. Esto ayudará a descubrir estos errores rapidamente.  Otra opcion es realizar los comentarios empezandolos con los signos /* y terminandolos con los signos */ . Esto abre y cierra el comentario, a diferencia de comentarlo con // donde el comentario queda abierto y listo para errores de retorno de linea.


 


e) Inventar una nueva forma de escribir las funciones propias de PHP. Este error sucede cuando no se respeta la forma en que en el sitio PHP.net indican que deben usarse ciertas funciones como mysql_query y mysql_fetch_array entre otras.


Tomemos por caso este ejemplo:


$results=mysql_query("base","select * from tabla");


El error esta dentro de la sentencia mysql_query. Tal como indica php.net, la forma en que debe escribirse la sentencia mysql_query es: mysql_query( consulta, identificador de enlace).


O sea, dentro de la funcion va una consulta SQL como esta "select * from tabla" y un identificador de enlace, que puede ser una variable de conexion, como $conexion.


Sin embargo, si leemos con atencion, veremos que en el codigo han escrito la base de datos primero y luego la sentencia SQL, lo que obviamente ocasiona este error.


Una forma de evitarlo,es, cuando hay dudas sobre si una funcion esta bien o mal escrita, ir a php.net y buscarla. Esto nos dara informacion que nos permitirá cotejar si esta escrita correctamente.


 


f)  No usar prefijo antes del nombre de la base de datos y del usuario en la conexion pasada a PHP. En algunos servidores como el nuestro, toda base de datos creada y todo usuario de base de datos creado lleva adelante de el como prefijo el usuario para Cpanel o FTP del sitio y un guion bajo, luciendo de este modo:


Nombre de base de datos: usuariocpanel_base

Nombre de usuario: usuariocpanel_usuario


Si cuando usamos una instruccion mysql_connect para conectarnos a la base de datos indicamos sin el prefijo alguno de ambos datos, esto puede originar un error de conexion que impida al mysql_query hacer la consulta. Aunque, lo mas probable es que la ejecucion del programa se detenga antes, mostrando la leyenda: unable access to database ( imposible acceder a la base de datos).


 


g) Pensar que un programa en PHP es eterno. Este es un error muy comun en programadores principalmente cuando aprenden de cursos o de libro, pensar que las instrucciones que usan en sus programas son compatibles con todas las veriones de PHP, pasadas o futuras y que algo programado hoy servira para la version 5, 6, 7, 10, etc.


Este fue el caso de la programacion con register_globals en on, que, cuando la norma paso a ser off, muchos programadores comenzaron a quejarse de que sus programas no andaban. Sin contar los reclamos de algunos "prestigiosos y seguros lideres de programadores" aduciendo que no activar register_globals les costaba un 20% a 30% en gastos para revisiones de seguridad de los sitios de sus clientes que ellos se jactaban de programar en forma segura.


Y este tambien será el caso de algunas funciones como mysql_db_query cuyo uso PHP.net recomienda depreciar, usando en cambio funciones como mysql_query y mysql_select_db


Bien, hasta aqui te hemos presentado algunas de las posibles causas del problema. Esperamos que te sirvan en tu investigacion y desde luego tus comentarios.


 


 


Enlaces relacionados

 

Tags relacionados

 

feed,

Conversaciones



Sin Nick


2007-12-16
hola yo tengo esta consulta:
$consulta=mysql_query("SELECT nick FROM users WHERE nick='$user' ");
if($user_ok=mysql_fetch_array($consulta))

mas sin envargo me da este error
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/content/m/s/o/msolis/html/testing/registrar.php on line 23
alguien amablemente me pudiera ayudar

mi correo es msolis@sysguate.com

gracias


Sin Nick


2007-12-02
Hola!
Yo tengo esta consulta:
$consulta="select * from contrasena where dni like '".$dni."' AND contrasena like'".$pass."'";
$resultados=mysql_query($consulta);
$fila1=mysql_fetch_array($resultados);
y en la web funciona, pero en mi casa, de repente a dejado de funcionar y da el error ese....sabeis qué pasa???

Nick (sin espacios, ni acentos)

Tu Email:
Permitir que otros usuarios me contacten

Tu Contraseña:

Tus comentarios:

 

Los mas buscados

 

Canales
Aikido
Brazilian
Defensa Personal
Tai chi chuan
Valetodo
Ipod Iphone
Telefonos
Administracion
Empleo
Emprendedores
Gurues
Mercadeo
Motivacion
Temas Legales
Sony Vegas
Playstation
Trucos
PHP
Dreamweaver
Excel
Flash
Photoshop
PowerPoint
varios
Dietas
Enfermedades
Area de Usuarios
Bases de Datos
Buscadores
Compras
Correo Electronico
Evitando el Spam
Panel CPanel
Panel Plesk
Revendedores
Sobre mi dominio
Solucion de problemas
Subiendo mi sitio
Utilidades
Videos Rhosting

Ultimas 5 personas buscando Amor!

DANIELPUEBLA (44)
Argentina

"ASI SOY"
Buscando: Mujer
k00rp00s (32)
Argentina

"Amigos y algo más"
Buscando: Mujer
brenda (30)
España

"hola "
Buscando: Hombre
diablito (24)
Bolivia

"hola soy una persona tierno y muy sincero aberigualo y te convenseras"
Buscando: Mujer
Kike58 (50)
México

"xxxxxxxxxxxxxxxxxxxxx"
Buscando: Mujer

[+] Ver más

Registrate Gratis y conocé el tuyo!

 

Este contenido es útil para..

Aquellas personas que se enfrentan al problema descripto y se quedaron sin ideas para resolverlo.

Recibe nuestras novedades

Si deseas recibir nuestro boletin con informaciones útiles y sorprendentes dejanos tu email aqui



Herramientas Utiles

 


 

 

 

 

Terminos del Servicio - Politica de Privacidad - Ayuda a tus amigos, recomiendanos!
Todos los articulos de la seccion de Ayuda son Copyleft. Podes reproducirlos citando la fuente.
Producto Rhosting.com.ar- 1999 al 2008 - Resistencia - Chaco Las Malvinas son Argentinas