Foros del Web » Programando para Internet » PHP »

Amigos, ayudenme con este problema que me urge

Estas en el tema de Amigos, ayudenme con este problema que me urge en el foro de PHP en Foros del Web. No entiendo porque de cuando en cuando al hacer una consulta sale este error con con el fetch_array: Warning: mysql_fetch_array(): supplied argument is not a ...
  #1 (permalink)  
Antiguo 14/08/2006, 12:48
Avatar de ravalos7  
Fecha de Ingreso: diciembre-2005
Mensajes: 102
Antigüedad: 18 años, 3 meses
Puntos: 0
Amigos, ayudenme con este problema que me urge

No entiendo porque de cuando en cuando al hacer una consulta sale este error con con el fetch_array:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

El codigo que la genera es el siguiente:

//EJECUCION DE CONSULTA SELECCIONADA DE ACUERDO A FOTO ACTUAL Y MOVIMIENTO ESCOGIDO

include("conexion.php");
$result=mysql_query($consulta);
while ($row=mysql_fetch_array($result))
{ //cargar variables con contenido de campo
$id=$row["id"];
$cuadro=$row["cuadro"];
$autor=$row["autor"] ;
$categoria=$row["categoria"];
$estado=$row["estado"];
$nombrefoto=$row["archivo"];
$directorio="pinturas/";
}
Ayudenme por favor, que estoy tratando de terminar un sitio para mi trabajo, debo me queda poco tiempo y no consigo solucionar este problema

Gracias amigos,

Desde Chile un abrazo a la distancia,

Ricardo
  #2 (permalink)  
Antiguo 14/08/2006, 13:20
Avatar de skatomundo  
Fecha de Ingreso: junio-2002
Ubicación: Santiago - CL
Mensajes: 2.532
Antigüedad: 21 años, 9 meses
Puntos: 125
Código PHP:
$result=mysql_query($consulta); 
hay alguna SQL llamada a la ejecución sobre la conexión es consulta?? o seria
$result=mysql_query($sql,$consulta);
o
$result=mysql_query($consulta,$conexion);

algo así
  #3 (permalink)  
Antiguo 14/08/2006, 17:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En el código que presentas no se vé donde delcaras $consulta (con la sentencia SQL a ejecutar) ni que contiene o que haces en "conexion.php" ..

Por lo demás .. para ver mensajes de error de esas características más claros usa:

Código PHP:
$result=mysql_query($consulta) or die (mysql_error()); 
Así veras el mensaje de error que Mysql está dando y no sòlo el que PHP dá por "reventar" el código por otras razones en esa pàrte de tu código ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 14/08/2006, 17:32
 
Fecha de Ingreso: agosto-2006
Mensajes: 177
Antigüedad: 17 años, 8 meses
Puntos: 1
asumo q $consulta esta en el archivo incluido

por lo tanto ese error lo tengo cuando la consulta no devuelve resultados

no se si t estara pasando por lo mismo

yo colocaria un mysql_num_rows()

y si el resultado es 0 q diga que no devolvio coincidencias y si no q ejecute el while ;)

salu2
  #5 (permalink)  
Antiguo 14/08/2006, 17:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por rumo Ver Mensaje
asumo q $consulta esta en el archivo incluido

por lo tanto ese error lo tengo cuando la consulta no devuelve resultados

no se si t estara pasando por lo mismo

yo colocaria un mysql_num_rows()

y si el resultado es 0 q diga que no devolvio coincidencias y si no q ejecute el while ;)

salu2
Yo insisto en lo mismo.

No se trata muchas veces de "probar" .. sino de "ver" cual es el mensaje de error exacto. PHP no dà un mensaje de error exacto .. sòlo si lo muestras por mysql_error() en este caso. Tampoco es bueno "asumir" nada .. sobre todo cuando uno está intentando dar una orientación a otro .. por qué para lo que a una persona es "obvio" para otra "se le pasó" y ahí tenía el problema (sólo es una recomendación ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 14/08/2006, 18:05
 
Fecha de Ingreso: agosto-2006
Mensajes: 177
Antigüedad: 17 años, 8 meses
Puntos: 1
ravalos7 serias tan amable de dar el valor de la variable $consulta para dejar de asumir, por lo demas la idea es q aprendas por lo tanto no saco nada diciendote hazlo de tal y cual forma ya q asi no vas a saber como cuando y porque, probablemente para mi lo obvio es q aprendi a identificar errores de mysql/php viendolos, sin embargo no esta demas "probar".
  #7 (permalink)  
Antiguo 14/08/2006, 18:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por rumo Ver Mensaje
ravalos7 serias tan amable de dar el valor de la variable $consulta para dejar de asumir, por lo demas la idea es q aprendas por lo tanto no saco nada diciendote hazlo de tal y cual forma ya q asi no vas a saber como cuando y porque, probablemente para mi lo obvio es q aprendi a identificar errores de mysql/php viendolos, sin embargo no esta demas "probar".
Pues .. para verlos:

Cita:
$result=mysql_query($consulta) or die (mysql_error());
Ahí le dirá algo màs concreto sobre su error .. Desde que la sentencia SQL está vacia (caso de no haber definido ese tal "$consulta" .. ) hasta problemas de conexión .. o de sintax SQL (tal campo no existe .. tal problema en tal parte .. etc).

De todas formas .. como por A o B motivo una consulta SQL puede no arrojar resultados .. no está de más simpre hacer validaciones tipo:

Código PHP:
if (mysql_num_results($result) > 0){
// accedes a los valores de tu "record-set" o resultado con 
// mysql_result() .. o mysql_fetch_xxx() funciones ..

} else {
// no hay resultados ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 21/08/2006, 07:49
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Probá poniendo "@" delante de la sentencia:

Es decir:
Reemplazá while ($row=mysql_fetch_array($result))
por while ($row=@mysql_fetch_array($result))
  #9 (permalink)  
Antiguo 21/08/2006, 09:21
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Cita:
Iniciado por solecoza Ver Mensaje
Probá poniendo "@" delante de la sentencia:

Es decir:
Reemplazá while ($row=mysql_fetch_array($result))
por while ($row=@mysql_fetch_array($result))
no es mala onda, pero eso en ves de ayudar lo unico que hace es que no muestra el error, mas no lo esta solucionandolo, creo que este tipo de consejos no deberian de darce a una persona que esta aprendiendo pues siempre lo va a utilizar y siempre tendra un codigo mal y mucho menos pensara en depurarlo, aparte de que no sabra en donde o porque se origino el error y como resolverlo
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 21/08/2006, 11:00
 
Fecha de Ingreso: agosto-2006
Mensajes: 177
Antigüedad: 17 años, 8 meses
Puntos: 1
no es malo poner la "@" en el codigo, pero como dices tu, esto no solucionara el problema la idea es arreglarlo y luego cuando el codigo funcione bien aplicar "@" para evitar mostrar errores a los usuarios por una cosa de estetica y seguridad "ojo, una vez que el codigo funcione bien"
a todo esto quizas ravalos ya soulciono el problema XD.

salu2
  #11 (permalink)  
Antiguo 21/08/2006, 11:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
de hecho tienes que hacer mas cuando haces una aplicacion Web, no basta con @ ya que como decian solo evita la salida o mensajes de error, lo mas recomendable, es tener una forma de loggear errores, y poder mandarlos por correo etc. para que el programador pueda checar el porque de esos errores, ej:
Código PHP:
function mysql_safe_query$query, &$conn ) {
     global 
$developerEmail;
     
     
ob_start();
     
$result mysql_query$query$conn );
     
$error ob_get_clean();
     
     if( !empty( 
$error ) ) {
          
mail$developerEmail"MySQL Error"$error );
     }

     return 
$result;

  #12 (permalink)  
Antiguo 21/08/2006, 11:07
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
bueno, yo no he dicho ue sea malo, solo dije que no es aconsejable para personas que estan aprendiendo, pues se crea un habito, mas no estoy diciendo que sea malo, aparte lo que comentas de " y luego cuando el codigo funcione bien aplicar "@" para evitar mostrar errores a los usuarios por una cosa de estetica y seguridad " si el codigo funciona bien y esta bien implementado no tienes porque porner la @, ya que si funciona bien el codigo no mandara ningun error, ahora que lo realmente hace el @ es no mostrar el error, sin embargo el error esta hay y si el servidor lleva un registro no quiero saber hasta donde puede llegar pues el error se sigue dando y el registro seguira aumentando

PD: mas simple imposible:
"de hecho tienes que hacer mas cuando haces una aplicacion Web, no basta con @ ya que como decian solo evita la salida o mensajes de error, lo mas recomendable, es tener una forma de loggear errores, y poder mandarlos por correo etc. para que el programador pueda checar el porque de esos errores"
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #13 (permalink)  
Antiguo 21/08/2006, 11:11
 
Fecha de Ingreso: agosto-2006
Mensajes: 177
Antigüedad: 17 años, 8 meses
Puntos: 1
pero puede que se de el caso de que haya algun problema con la BD y no se pueda establecer una conexion y obtebdriamos un lindo mensaje de error mostrando nuestro nombre de usuario y host, o peor error en todas nuestras consultas sql y fetch y num y ahhhahahah y he visto paginas con un lindo header lleno de errores mysql XD.
  #14 (permalink)  
Antiguo 21/08/2006, 11:17
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Cita:
Iniciado por rumo Ver Mensaje
pero puede que se de el caso de que haya algun problema con la BD y no se pueda establecer una conexion y obtebdriamos un lindo mensaje de error mostrando nuestro nombre de usuario y host, o peor error en todas nuestras consultas sql y fetch y num y ahhhahahah y he visto paginas con un lindo header lleno de errores mysql XD.
entonses el problema es que no estas filtrando los errores, para el ejemplo que pones "haya algun problema con la BD y no se pueda establecer una conexion" yo me adelantaria al ingresarle al codigo de conexion unas cuantas lineas mas (de hecho es algo sencillo, pues podria mejorarse y al final presentar mensajes de error muy personalizados donde se muestre lo que se tenga que mostrar) ejem:

Código PHP:
$conexion=mysql_connect("server","user","pass") or die ("Error al intentar conexion con la Base de datos"); 
con lo cual yo sabria que el error esta en la base de datos y podria arreglarlo rapidamente, sin embargo si pongo el @ no encontrare el problema rapidamente, aun asi, mandarian error las query que le sigan a la conexion y un largo etc, asi que hasta donde yo veo habria problemas para saber donde se originan los errores y tardaria mas en arreglarlos

en si no es decir si es malo o no la utilizacion del @ si no que se hace un habito, y luego cuando la web tenga problemas sera mas dificil solucionarlo

PD: con respecto a lo que pones "o peor error en todas nuestras consultas sql y fetch y num" no me digas que crees que al poner el @ en la conexion no te mandaran error las demas sentencias que tengas...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 21/08/2006 a las 11:22
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 14:36.