TransWikia.com

intento mostrar los datos de mi bd en una tabla y me da fatal error

Stack Overflow en español Asked on November 22, 2021

estoy intentando mostrar en una tabla todos los datos que contiene mi base de datos y me aparece un fatal error, es este: Fatal error: Uncaught Error: Call to undefined method mysqli::mysqli_num_rows().

como se observa en el codigo intento mostrar cada uno de los datos en cada una de las lineas de la tabla y mediante el while hago el ciclo para que muestre todas las rows que existan en mi base de datos.

$sql="SELECT * FROM rock";
        $resultado=$conexion->query($sql);
        $num=$conexion->mysqli_num_rows($resultado);

            while ($i < $num) {

                $cedula=$row["cedula"];
                $nombre=$row["nombre"];
                $apellido=$row["apellido"];
                $direccion=$row["direccion"];
                $telefono=$row["telefono"];

        ?>

        <table>
        <caption>Rock Sinfonico</caption>

        <div class="busqueda">
        <form action="" method="">          
            <input  type="search" size="10" placeholder="Buscar...">                
            <button>Buscar</button>
        </form>
        </div>

        <thead>
            <tr>
                <th>Nombre</th>
                <th>Apellido</th>
                <th>Cedula</th>
                <th>Direccion</th>
                <th>Telefono</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><?php echo $nombre; ?></td>
                <td><?php echo $apellido; ?></td>
                <td><?php echo $cedula; ?></td>
                <td><?php echo $direccion; ?></td>
                <td><?php echo $telefono; ?></td>
                <td> <a href="">Editar</a></td>
                <td> <a href="">Eliminar</a></td>
            </tr>
        </tbody>
    </table>

<?php
    
    $i++;
    }   
        $conexion->close();

?>

One Answer

Hay al menos dos errores en tu código:

Aquí $num=$conexion->mysqli_num_rows($resultado) estás usando la conexión para llamar a mysqli_num_rows. Si lees la documentación verás que esa función es parte de un conjunto de resultados, no de la conexión. Además, estás mezclando estilos (procedural y orientado a objetos), lo cual no es recomendable, precisamente el error en esa línea se debe a la confusión entre ambos estilos. Te recomiendo que uses solo el estilo orientado a objetos. La línea debe quedar así: $num=$resultado->num_rows;

Por otra parte, mysqli tiene sus propios métodos para obtener los resultados, son los métodos fetch_, que puedes revisar también en la documentación. Como tienes el while actualmente no podrás leer los resultados.

Generalmente lo que se haces es verificar con num_rows si hay filas y luego usar uno de los métodos fetch_ para mostrar los resultados.

Debes refinar un poco la lógica en tu programa. La tabla debe llenarse únicamente cuando se haya comprobado que hay datos. Además, debes construir los tr dentro del while que leería los datos.

Te dejo la corrección del código y de la logica en las partes esenciales, solo es cuestión de completar en tu entorno:

#Verificamos si hay filas directamente
if ($resultado->num_rows > 0) {
    #Deberias empezar aquí a construir la tabla, no antes
    #Pon AQUI todo lo previo a tu tabla, los divs,
    #el form, etc. La cuestión es empezar a crear esa parte
    #una vez se haya verificado que la consulta trae datos 
    #Damos por supuesto que ya tienes las etiquetas
    #de apertura de tabla, los encabezados, el tbody etc ...
    #... ahora escribimos los tr y td dentro del while
    #usando un método fetch adecuado
    #Concatenaremos todas las filas en una variable
    #para dar claridad al código y evitar tantas mezclas
    #de bloques PHP/HTML
    $mRows="";
    while ($row=$resultado->fetch_assoc()) {
        $mRows.="<tr>
                      <td>$row[cedula]</td>
                      <td>$row[nombre]</td>
                      <td>$row[apellido]</td>
                      <td>$row[direccion]</td>
                      <td>$row[telefono]</td>  
                </tr>";
    }
    #Ahora imprimimos todas las filas
    #Como ya dije, acopla adecuadamente
    #los demás elementos de tu tabla 
    echo $mRows;
} else {
    #Si no hay filas imprimes un mensaje o lo que quieras
    echo "No se encontraron filas";
}
$conexion->close();

Esa es la lógica a seguir para un código coherente, organizado y más limpio. Si hay dudas dímelo comentando está respuesta. Espero te sirva.

Answered by A. Cedano on November 22, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP