Perdona nitramara, quizás he querido resumir en exceso y por eso no se entiende muy bien mi respuesta. Además, te he dicho una cosa mal: mysql_affected_rows sólo sirve para sentencias INSERT, UPDATE o DELETE, pero no para SELECT. Disculpa la confusión.
Trataré de explicartelo mejor y más detalladamente.
Cuando haces una query a base de datos, te devuelve un valor con el que puedes identificar los resultados y trabajar con ellos:
Código PHP:
$res = mysql_query($sql);
El resultado que te digo se guarda en $res. Si la query no devuelve ningún resultado, $res se establece a FALSE, en lugar de contener los resultados, por lo que tienes que tener cuidado a la hora de trabajar con la variable $res, ya que puede no contener nada y puede generar errores. Antes de usar $res, por tanto, debes asegurarte de que ha devuelto algún resultado.
Para ver si ha obtenido algún resultado tú usas la función mysql_num_rows, pero esta función requiere que la query haya devuelto algún resultado, en caso cotrario, da un error. Es como la pescadilla que se muerde la cola: usas mysql_num_rows para saber si ha habido algún resultado, pero mysql_num_rows necesita que haya habido algún resultado para funcionar correctamente, ¿lo entiendes?
En resumen, para comprobar si ha habido algún resultado, basta con que compruebes si $res es FALSE o no; si lo es, no ha devuelto resultados y si no, sí los ha devuelto:
Código PHP:
if ($res != false) // En este caso, esto es lo mismo que poner if($res)
{
// Si entra aquí es porque $res no es FALSE; es decir, ha devuelto resultados
$tot = mysql_num_rows($res); // Como $res no es FALSE, seguro que no falla
while ($datos=mysql_fetch_assoc($res))
{
// ... código para generar la tabla
}
}
else
{
// Si entra aquí es porque $res es FALSE; es decir, NO ha devuelto resultados
echo "no hay resultados";
}
Espero haberte quitado la confusión que te he provocado con la explicación anterior.
Salu2,
Carlos.