3

TENGO PROBLEMAS AL MOSTRAR LOS DATOS NO SE COMO HACERLO CON PDO YA MIRE VARIOS EJEMPLOS PERO NO ENCUENTRO UNO QUE ME SIRVA

<?php

$conexion=new PDO("mysql:host=127.0.0.1;dbname=eladeria","root","");

    $busqueda=$conexion->prepare("Select * from ventas");
    $busqueda->execute();

?>

<table   class="table table-bordered">
    <th class="bg-primary" scope="col">Id</th>
    <th class="bg-primary" scope="col">producto</th>
    <th class="bg-primary" scope="col">precio</th>
    <th class="bg-primary" scope="col">cantidad</th>
    <th class="bg-primary" scope="col">Fecha de venta</th>
    <?php

   /* var_dump($busqueda);*/
    while ($muestra = fetchAll($busqueda)) {
        echo '<tr>';

        echo '<td >' . $muestra['id'] . '</td>';
        echo '<td >' . $muestra['producto'] . '</td>';
        echo '<td >' . $muestra['precio'] . '</td>';
        echo '<td >' . $muestra['cantidad'] . '</td>';
        echo '<td >' . $muestra['fecha_cantidad'] . '</td>';

        echo '<td>
                  <a class="btn btn-danger ajax-request" id="eliminar"  data-target="'.$muestra['id_persona'].'">   
                  <i   class="fas fa-trash"></i>
                  </a>

                 </td>';
        echo ' </tr>';

    }
    ?>

</table>
srJJ
  • 1,789
  • 1
  • 9
  • 25
user9472850
  • 149
  • 2
  • 12
  • que error te sale ? – srJJ Aug 02 '18 at 01:34
  • Fatal error: Call to undefined function fetchAll() in D:\xampp\htdocs\eladeria\vistas\inventario\ventas\ventas.php on line 6 – user9472850 Aug 02 '18 at 01:35
  • Cuando quiero recorrer los datos con el while me muestra que fetchAll esta malo no se como mostrar los datos con PDO – user9472850 Aug 02 '18 at 01:36
  • en la parte de abajo los Maestro @Alfredo y A. Cedano dieron las soluciones mas acertadas, asi que ni para que te explico algo...suerte bro... ReNiceCode – srJJ Aug 02 '18 at 02:06

2 Answers2

4

Tu código es erróneo e incoherente.

Es erróneo porque fetchAll es un método del objeto PDOStatement, o sea, el objeto que se crea sea con prepare o con query. En tu caso ese objeto es $busqueda, por lo tanto para invocar a fetchAll debes usar a su objeto, aplicando el estilo de llamada: $objeto->metodo(parametros). Además, lo que fetchAll debe recibir en parámetro es el fetch_style. Además, no es para usar en un while, como ocurre con fetch (ver aquí para más detalles) pues él te devuelve de una vez todos los datos que trae la consulta. En vez de invocar constantemente a fetchAll en el while lo correcto es almacenar su resultado en una variable y recorrer esa variable para mostrar los datos (ver el uso de $arrDatos en el código más abajo).

Es incoherente porque tu consulta no necesita ser preparada, dado que no maneja datos externos. Puedes usar query en este caso.

Sugiero que pruebes así:

$conexion=new PDO("mysql:host=127.0.0.1;dbname=eladeria","root","");

    $busqueda=$conexion->query("Select * from ventas");
    /*Almacenamos el resultado de fetchAll en una variable*/
    $arrDatos=$busqueda->fetchAll(PDO::FETCH_ASSOC);

?>

<table   class="table table-bordered">
    <th class="bg-primary" scope="col">Id</th>
    <th class="bg-primary" scope="col">producto</th>
    <th class="bg-primary" scope="col">precio</th>
    <th class="bg-primary" scope="col">cantidad</th>
    <th class="bg-primary" scope="col">Fecha de venta</th>
    <?php

   /* var_dump($arrDatos);*/
   /*Recorremos todos los resultados, ya no hace falta invocar más a fetchAll como si fuera fetch...*/
   foreach ($arrDatos as $muestra) {
        echo '<tr>';

        echo '<td >' . $muestra['id'] . '</td>';
        echo '<td >' . $muestra['producto'] . '</td>';
        echo '<td >' . $muestra['precio'] . '</td>';
        echo '<td >' . $muestra['cantidad'] . '</td>';
        echo '<td >' . $muestra['fecha_cantidad'] . '</td>';

        echo '<td>
                  <a class="btn btn-danger ajax-request" id="eliminar"  data-target="'.$muestra['id_persona'].'">   
                  <i   class="fas fa-trash"></i>
                  </a>

                 </td>';
        echo ' </tr>';

    }
    ?>

</table>
A. Cedano
  • 86,578
  • 19
  • 122
  • 221
1

Te saludo y te comento lo siguiente, primero yo dejaría el ejercicio de este modo(el cual ya he probado y es funcional)

<?php

$conexion=new PDO("mysql:host=127.0.0.1;dbname=blog;port=3307","root","pass");

    $busqueda=$conexion->prepare("Select * from users");
    $busqueda->execute();
    $resultado = $busqueda->fetchAll();

?>

<table   class="table table-bordered">
   <tr>
      <th class="bg-primary" scope="col">Id</th>
      <th class="bg-primary" scope="col">nameUser</th>
      <th class="bg-primary" scope="col">passwordUser</th>
      <th class="bg-primary" scope="col">statusUser</th>
      <th class="bg-primary" scope="col">created_at</th>
      <th class="bg-primary" scope="col">address</th>
   </tr>
    <?php
      foreach($resultado as $res)
      {
        echo "<tr>";
        echo "<td>".$res["idUser"]."</td>";
        echo "<td>".$res["nameUser"]."</td>";
        echo "<td>".$res["passwordUser"]."</td>";
        echo "<td>".$res["statusUser"]."</td>";
        echo "<td>".$res["created_at"]."</td>";
        echo "<td>".$res["address"]."</td>";
        echo "</tr>";
      }   
    ?>
</table>

Como puedes ver no meto a fetchAll() en el bucle, sino que por fuera lo hago donde $resultado recibe el valor de búsqueda y este mismo a su vez accede a fetchAll() que lo va a convertir en un array el cual después puedes recorrer idealmente por el bucle foreach el cual me ayuda a recorrer los elementos asignando el valor en cada iteración a un alias que en este caso es $res

El foreach es útil ya que por ejemplo si haces un $var_dump($resultado); verás que te trae un arreglo en forma de clave valor lo que deriva en que para poder hacer el recorrido de los valores foreach no es mas úil

Nota si algunos datos no llegan a parecer familiares con tu ejercicio es por que lo replique con uno propio para encontrar el por que de tu fallo

Como tu mismo puedes comprobar, desde la documentación oficial de PHP, en el siguiente enlace http://php.net/manual/es/pdostatement.fetchall.php

el método fetchAll() de por si ya devuelve el arreglo completo de datos de la consulta; entonces ya no es necesario meterlo en el bucle

  • muchas gracias con el primer ejemplo que me mostraste me funciono y de esta forma igual me fue de mucha ayuda te agradezco – user9472850 Aug 02 '18 at 02:06
  • de nada, te recomiendo aceptes la respuesta de A.Cedano ya que esta mucho mejor explicada que la mia saludos @user9472850 –  Aug 02 '18 at 02:07