Ver Mensaje Individual
  #4 (permalink)  
Antiguo 30/11/2014, 13:00
Avatar de gnzsoloyo
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: Tabla vacía en resultados de BD

¿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 original
  1. mysql> select ('uno' = 'uno') sinEspacios, (' uno' = 'uno') conspacio;
  2. +-------------+-----------+
  3. | sinEspacios | conspacio |
  4. +-------------+-----------+
  5. |           1 |         0 |
  6. +-------------+-----------+
  7. 1 row in set (0.00 sec)
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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/11/2014 a las 13:14