¿Y al menos has comprobado esto?:
Código PHP:
<?php
$con = mysql_connect("servidor", "usuario", "clave") or die("Error al conectar a MySQL: " . mysql_error());
mysql_select_db("bd", $con) or die("Error al seleccionar la base: " . mysql_error());
// Aseguramos que la comparacion sea correcta, unificando los uppercase
$sql = "SELECT * FROM TABLE3 WHERE UPPER(Categoría) like UPPER('$$categoria%')";
// Comprobamos lo que hay en la query
echo $sql;
$result = mysql_query($sql, $con) or die("Error al realizar la consulta: " . mysql_error());
if ($result) {
// verificamos lo que se obtuvo
if (mysql_num_rows($result) == 0) {
echo "No se obtuvieron registros, o la tabla está vacía";
exit;
}
$total = mysql_num_rows($result);
echo "Resultados para: $categoria";
echo "<table border=1 cellspacing=5 cellpadding=10 bordercolor='E49E56'>";
echo "<tr align='center' bgcolor='E7AE18'><td>Número</td><td>Categoría</td><td>Nombre</td></tr>"; {
?>
<tr bgcolor="#fdfdbf" align='center'><td><?= $row['Número']; ?></td><td><?= $row['Categoría']; ?></td><td><?= $row['Nombre']; ?></td></tr>
<?
}
echo "</table>";
} else {
echo 'Incorrect.';
}
?>
Tengamos claras algunas cosas:
1) Una consulta sólo puede devolver cero registros si a) No hay datos que puedan cumplir las condiciones solicitadas en el WHERE, y b) la tabla está vacía (sin registros).
2) Que una tabla devuelva cero registros no dispara errores de sintaxis, por lo que la ausencia de datos devuelve los encabezados de las columnas, pero con datos nulos, lo que puede disparar errores de PHP.
3) Una condicion aparentemente correcta en el where puede no devolver datos si está mal expresada, o aplicada incorrectamente conforme los tipos de datos en MySQL. Que se vena iguales no necesariamente quiere decir que sean iguales, en determinados contextos.
Esto último se puede dar, por ejemplo, por la prsencia de espacios en blanco en la cadena de comparación:
Código MySQL:
Ver originalmysql
> select ('uno' = 'uno') sinEspacios
, (' uno' = 'uno') conspacio
;+-------------+-----------+
| sinEspacios | conspacio |
+-------------+-----------+
| 1 | 0 |
+-------------+-----------+
Como podrás ver, si hay un espacio precedente puede generarse algún tipo de error indetectable.
A lo que voy es que hay que verificar u asegurar que lo que entra por formulario sea correcto y elimina cualquier posibilidad de defectos formales. Eso sólo podremos comprarlo si nos muestras la query una vez armada y antes de ejecutarse.
Por otro lado,
siempre debes validar lo que MySQL devuelve. No se puede suponer que está funcionando bien. Siempre existe un error probable por cosas formales.