1

Necesito hacer una consulta PDO con el archivo funciones.php y llamar a esta función en el archivo index.php exactamente en la parte del html donde necesito hacer que la consulta se ejecute, luego muestro los empleadores en la tabla con el ciclo foreach, pero la consulta de llamada usando PDO y las funciones no funcionan para mí, tengo un error relacionado con los parámetros de PDO pero funcionan perfectamente, estos son errores que muestran el error en la pantalla.

El archivo funciones.php contiene la conexión PDO con todos los parámetros en otro archivo llamado conexion.php y el archivo funciones.php está incluido en el archivo principal index.php.

Necesito ayuda para hacer llamadas de consulta usando las funciones PDO y php (mis funciones correctamente)

<?php include 'funciones.php'; ?>
<!-- ... Código HTML -->
<table id="example1" class="table table-bordered table-striped">
    <thead>
        <tr>
            <th>ID</th>
            <th>Nombre</th>
            <th>Apellido</th>
            <th>Telefono</th>
        </tr>
    </thead>
    <?php
      mostrar_empleados();
      foreach($result as $empleado){
      ?>
    <tbody>
        <tr>
            <td><?php echo $empleado['id']; ?></td>
            <td><?php echo $empleado['nombre']; ?></td>
            <td><?php echo $empleado['apellido']; ?></td>
            <td><?php echo $empleado['telefono']; ?></td>
        </tr>
    </tbody>
    <?php } ?>  
    <tfoot>
        <tr>
            <th>ID</th>
            <th>Nombre</th>
            <th>Apellido</th>
            <th>Telefono</th>
        </tr>
    </tfoot>
</table>
<!-- ... Más código HTML -->

funciones.php

<?php 
require 'conexion.php';
function mostrar_empleados(){
    $statement = $pdo->prepare("SELECT * FROM empleados");
    $statement->execute();
    $result = $statement->fetchAll(PDO::FETCH_ASSOC);
}
?>

conexion.php

<?php
// Error Reporting Turn On
ini_set('error_reporting', -1);

// Setting up the time zone
date_default_timezone_set('America/Bogota');

// Host Name
$dbhost = 'localhost';

// Database Name
$dbname = 'intersuministros';

// Database Username
$dbuser = 'root';

// Database Password
$dbpass = '';

try {
    $pdo = new PDO("mysql:host={$dbhost};dbname={$dbname}", $dbuser, $dbpass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch( PDOException $exception ) {
    echo "Connection error :" . $exception->getMessage();
}
aeportugal
  • 7,106
  • 2
  • 9
  • 21
  • 1
    Hola. Tu pregunta no se entiende. ¿Cuál es el problema o error? Considera poner el título en español. Pulsa en [edit] para mejorar la pregunta. – A. Cedano May 27 '22 at 14:27
  • necesito realizar una consulta sql usando la extension PDO con un archibo de funciones.php. tengo el archibo index.php tengo el archibo funciones.php tengo el archibo conexion.php en el archibo index.php se incluye el otro archibo funciones.php y en el acrhibo funciones.php se incluye el otro archibo conexion.php. – santiago zuluaga May 27 '22 at 14:42
  • lo que realizo es llamar ala rchibo funciones.php en el archibo index.php,el archibo funciones.php tiene una funcion propia creada por mi y con la inclusion del archibo llamo a esa funcion en el archibo index.php,necesito que me ejecute dicha funcion en cualquiera parte del codigo html y php del archibo index.php,en ese momento me da error con la conexion los errores que muestra son para mi raros,porque sino uso funciones se muestra todo correctamente,nunca nates he hecho consultas sql llamando a funciones y quizas estoy realizando mal algun procedimiento – santiago zuluaga May 27 '22 at 14:43
  • 2
    *... en ese momento me da error con la conexion los errores que muestra son para mi raros,* Aunque los errores sean *raros* agrégalos en la pregunta, pues podrían ayudar a comprender lo que está ocurriendo. Y, en vez de ponerlo en comentarios, pulsa en [edit] para aclarar el contexto en la redacción de la pregunta. Y, considera escribir archivo con `v`... disculpa mi insistencia, mientras más claridad, mejor. – A. Cedano May 27 '22 at 15:05
  • No olvides además traducir el título de la pregunta. Por otra parte, pon la explicación _en la pregunta misma_. Lee [ask]. – padaleiana May 27 '22 at 15:06

1 Answers1

0

Hay 3 problemas críticos en el código:

[1] El script principal llama a la función mostrar_empleados(), y luego se utiliza una variable $result en un foreach que no se sabe de dónde sale.

[2] Para recibir los datos en la variable $result, alguien se los tiene que enviar. En otras palabras, falta un return _algo_ en la función mostrar_empleados().

[3] La función mostrar_empleados() usa una variable $pdo, la cual no está definida en su interior, solo es llamada a secas lo cual produce un error de que $pdo no está definida.
Lectura recomendada: Ámbito de las variables

Entonces, para hacer que funcione ese código:

index.php

<!-- ... contenido HTML -->
<?php
$result = mostrar_empleados(); // <-- Aqui se recibe el resultado de la funcion
foreach($result as $empleado) {
// ...

En la función mostrar_empleados() se require el archivo conexion.php, pero su contenido es ejecutado inmediatamente. En ese caso, la forma más rápida, y menos invasiva, de resolver el problema es declarando $pdo como global. Esto no es recomendado, pero habría que reescribir funciones.php y conexion.php lo cual ya no es parte del problema. Finalmente, debido a que el script principal está esperando datos, entonces hay que devolverselos con return:

funciones.php

<?php 
require 'conexion.php';
function mostrar_empleados(){
    global $pdo; // <-- Se incorpora $pdo dentro de la funcion [!] No recomendado
    $statement = $pdo->prepare("SELECT * FROM empleados");
    $statement->execute();
    $result = $statement->fetchAll(PDO::FETCH_ASSOC);
    return $result; // <-- Se envia el resultado al prog principal
}

Sugiero busques otros ejemplos de PDO, u otro curso donde se haga un mejor manejo de la conexión.

aeportugal
  • 7,106
  • 2
  • 9
  • 21