Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema raro en MySQL

Estas en el tema de Problema raro en MySQL en el foro de Mysql en Foros del Web. Hola amigos, miren tengo un problema que nunca me habia pasado. Cuando hago una consulta a la base de datos me sale el siguiente error: ...
  #1 (permalink)  
Antiguo 01/11/2011, 20:26
 
Fecha de Ingreso: julio-2011
Mensajes: 15
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Problema raro en MySQL

Hola amigos, miren tengo un problema que nunca me habia pasado.

Cuando hago una consulta a la base de datos me sale el siguiente error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/xxxxx/htdocs/login/xxxx/pepe.php on line 12

Ahora bien, empiezo a actualizar la web y a veces la consulta se realiza y a veces no. A veces, funciona bien de una, otras veces le doy una vez al F5 y funciona y a veces le tengo que dar como 20 veces al F5.

Saben por qué puede estar pasando esto ?

El codigo es el siguiente:

Código PHP:
<table align="center" width="80%" border="0" id="tabla_default">
    <tr class="tabla_default">
        <td align="center">N&uacute;mero</td>
        <td align="center">Recorrido</td>
        <td align="center">Nombre</td>
        <td align="center">Apellido</td>
        <td align="center">Seleccione</td>
    </tr>
    <? 
        $select
=mysql_query("SELECT*FROM tabla WHERE id_prod=1 ORDER by numero");
    
    while(
$row=mysql_fetch_array($select))
    {
    
?>    
    <tr class="tabla_default">
        <td align="center"><? echo $row[cartel];?></td>
        <td align="center"><? CambiaRecorrido($row[id_recorrido]) ?></td>
        <td align="center"><? echo $row[nombre];?></td> 
         <td align="center"> <? echo $row[apellido];?></td>
        <td align="center"><input type="radio" name="id_operacion" value="<? echo $row[numero];?>" /></td>
    </tr>
    <?
    
}
    
?>
</table>
El archvio es un include dentro de una web que tiene el paswrod, el nombre de la db y el usuario ....
  #2 (permalink)  
Antiguo 01/11/2011, 21:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema raro en MySQL

Técnicamente hablando no es un error de MySQL, sino un error de técnicas de programación en el PHP.
El problema es que la consulta puede estar devolviendo cero registros, y el while se ejecuta siempre al menos una vez, por lo que en realidad cuando sucede, lo hace sobre un registro inexistente.
El por qué puede que te funcione, eso no es posible saberlo desde la óptica del MySQL. Lo que yo te recomiendo es que antes del while verifiques que efectivamente la consulta haya devuelto al menos un registro.
Algo como:
Código PHP:
Ver original
  1. if($select)
  2.     {while($row=mysql_fetch_array($select))
  3.         { ...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/11/2011, 11:34
 
Fecha de Ingreso: junio-2007
Ubicación: Buenos Aires, Argentina
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Problema raro en MySQL

Hola, gnzsoloyo. El while sólo se ejecuta si la condición de entrada es verdadera:

Cita:
El significado de una sentencia while es simple. Le dice a PHP que ejecute las sentencias anidadas, tanto como la expresión while se evalúe como TRUE. El valor de la expresión es verificado cada vez al inicio del bucle, por lo que incluso si este valor cambia durante la ejecución de las sentencias anidadas, la ejecución no se detendrá hasta el final de la iteración (cada vez que PHP ejecuta las sentencias contenidas en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio, las sentencias anidadas no se ejecutarán ni siquiera una vez.
Fuente: http://php.net/manual/es/control-structures.while.php.

En cambio do ... while sí se ejecuta por lo menos una vez.

El problema que menciona nuestro amigo guidodipaolo no se debe a que php esté entrando en el bucle, sino que mysql_fetch_array da error si el select no devolvió ninguna fila.

Una alternativa es la que propusiste vos: verificar primero si se devolvió alguna fila. La otra es evitar que mysql_fetch_array muestre el error de la siguiente manera:

Código PHP:
Ver original
  1. while($row=@mysql_fetch_array($select))

¡Ah! un consejo, gnzsoloyo. No uses <? para iniciar una secuencia de PHP ya que no funciona en todos los servidores. Es aconsejable usar <?php.

Saludos!
Pablo
__________________
Moebius Digital | La pieza que faltaba
Diseño web | Web hosting

Etiquetas: php, query, raro, select, sql, tabla
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 00:55.