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:
¡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