UT4: TÉCNICAS DE ACCESO A DATOS EN PHP

Alberto Méndez Núñez | 03/10/2025

Curso 2025/2026 - Grupo DAW2

Muestra del código PHP ejercicio 5

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>CFGS - Desarrollo de Aplicaciones Web</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background: #f4f6f9;
            margin: 0;
            padding: 0;
        }
        header {
            background: #F59C27;
            color: white;
            padding: 15px;
            text-align: center;
        }
        h1 {
            margin: 0;
        }
        main {
            max-width: 1200px;
            margin: 30px auto;
            padding: 20px;
            background: white;
            border-radius: 10px;
            box-shadow: 0 4px 10px rgba(0,0,0,0.1);
        }
        ul {
            list-style: none;
            padding: 0;
        }
        footer{
            margin: auto;
            background-color: #F59C27;
            text-align: center;
            height: 150px;
        color: white;
            position: fixed;
            bottom: 0;
            left: 0;
            width: 100%;
        }
        a{
            text-decoration: none;
            color:purple;
        }
        
        table{
            border: 0;
        }
        
        td{
            padding: 10px;
            border-width: 4px;
        }
        
        #encabezado{
            background-color: lightsteelblue;
            font-weight: bold;
        }
        
        .codigos{
            background-color: lightblue;
        }
        
        .mostrar{
            background-color: lightsalmon;
        }
        
        tr{
            height: 80px;
        }
        
        input{
            border-radius: 5px;
        }
        
        #boton{
            border-radius: 5px;
            width: 150px;
            background-color: lightgreen;
        }
        
        label{
            font-weight: bold;
        }
        
        h3{
            text-decoration: underline;
        }
        
        #formulario table{
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
        }
        

    </style>
</head>
<body>
    <header>
        <h1><b>UT4: TÉCNICAS DE ACCESO A DATOS EN PHP</b></h1>
        <h4><a href="../../AMNDWESProyectoDWES/indexProyectoDWES.php">Alberto Méndez Núñez | 03/10/2025</a></h4>
        <p>Curso 2025/2026 - Grupo DAW2</p>
    </header>
    <main>
        <h2><b>Ejercicio 5</b></h2>
        
        <?php
        
                /*
         * Autor: Alberto Méndez Núñez
         * Fecha de ultima modificación: 13/11/2025
         * Pagina web que añade tres registros a nuestra tabla Departamento 
         * utilizando tres instrucciones insert y una transacción, de tal forma que se añadan los tres registros o no se añada ninguno.
         */

        require_once '../config/confDBPDO.php'; // Importamos la configuración de la base de datos (RUTA, USUARIO, PASS)

        /* ==================== Conexión a la base de datos ==================== */
        try {
            // Creamos la conexión PDO a la base de datos
            $miDB = new PDO(RUTA, USUARIO, PASS);
            // Configuramos PDO para que lance excepciones en caso de error
            $miDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $ex) {
            // Si hay un error de conexión, se muestra el mensaje y el código, y se detiene la ejecución
            echo "Error de conexión a la base de datos: " . $ex->getMessage() . "<br>";
            echo "Código de error: " . $ex->getCode();
            exit;
        }

        /* ==================== Consulta inicial (opcional) ==================== */
        // Se ejecuta una consulta inicial para obtener todos los registros (aunque no se usa para nada aquí)
        $resultadoConsulta = $miDB->query("SELECT * FROM T02_Departamento");

        /* ==================== Inicio de la transacción ==================== */
        $miDB->beginTransaction(); // Iniciamos la transacción para que todos los inserts se ejecuten juntos

        /* ==================== Primer INSERT ==================== */
        $query1 = "INSERT INTO T02_Departamento 
                   (T02_CodDepartamento, T02_DescDepartamento, T02_FechaCreacionDepartamento, T02_VolumenNegocio, T02_FechaBajaDepartamento)
                   VALUES('AAA','Departamento transacción 1',NOW(),1234,NULL)";

        $miDB->query($query1); // Ejecutamos el primer INSERT

        /* ==================== Segundo INSERT ==================== */
        $query1 = "INSERT INTO T02_Departamento 
                   (T02_CodDepartamento, T02_DescDepartamento, T02_FechaCreacionDepartamento, T02_VolumenNegocio, T02_FechaBajaDepartamento)
                   VALUES('BBB','Departamento transacción 2',NOW(),123,NULL)";

        $miDB->query($query1); // Ejecutamos el segundo INSERT

        /* ==================== Tercer INSERT ==================== */
        $query1 = "INSERT INTO T02_Departamento 
                   (T02_CodDepartamento, T02_DescDepartamento, T02_FechaCreacionDepartamento, T02_VolumenNegocio, T02_FechaBajaDepartamento)
                   VALUES('CCC','Departamento transacción 3',NOW(),12,NULL)";

        $miDB->query($query1); // Ejecutamos el tercer INSERT

        /* ==================== Commit de la transacción ==================== */
        $miDB->commit(); // Confirmamos la transacción: los tres registros se añaden de forma atómica
        echo "Insertados correctamente";

        /* ==================== Mostrar los registros ==================== */
        try {
            $query = $miDB->query("SELECT * FROM T02_Departamento"); // Consultamos todos los registros

            if ($query->rowCount() > 0) { // Si hay registros
                echo "<table border='2' style='border-collapse: collapse;'>";
                echo "<tr style='background-color: lightsteelblue; font-weight: bold;'>";

                // Mostramos los nombres de las columnas
                for ($i = 0; $i < $query->columnCount(); $i++) {
                    $nomColumna = $query->getColumnMeta($i)["name"];
                    echo "<th>{$nomColumna}</th>";
                }
                echo "</tr>";

                // Recorremos cada registro y lo mostramos en la tabla
                while ($registro = $query->fetch(PDO::FETCH_OBJ)) {
                    echo "<tr>";
                    foreach ($registro as $valor) {
                        echo "<td style='padding:5px;'>$valor</td>";
                    }
                    echo "</tr>";
                }

                echo "</table>";
                echo "<h3 style='text-align:center;'>Hay {$query->rowCount()} registros.</h3>";
            } else {
                echo "<p>No hay departamentos en la base de datos.</p>";
            }
        } catch (PDOException $ex) {
            // Mostramos errores de la consulta
            echo "Error al mostrar departamentos: " . $ex->getMessage();
        } finally {
            // Cerramos la conexión
            unset($miDB);
        }
        ?>
    </main>
</body>
</html>