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 1

<!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: 1000px;
            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-collapse: collapse;
            width: 100%;
            border-width: 4px;
        }
        
        td{
            padding: 10px;
            border-width: 4px;
        }
        
        #encabezado{
            background-color: lightsteelblue;
            font-weight: bold;
        }
        
        .codigos{
            background-color: lightblue;
        }
        
        .mostrar{
            background-color: lightsalmon;
        }
        
        tr{
            height: 80px;
        }

    </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 1</b></h2>
        
        <?php
        
                /*
         * Autor: Alberto Méndez Núñez
         * Fecha de ultima modificación: 30/10/2025
         * (ProyectoTema4) Conexión a la base de datos con la cuenta usuario y tratamiento de errores.
            Utilizar excepciones automáticas siempre que sea posible en todos los ejercicios.
         */
        
        // Incluye el archivo de configuración donde se definen la ruta, usuario y contraseña de la base de datos.
        require_once '../config/confDBPDO.php';

        // Array con los nombres de los atributos de la conexión PDO que queremos mostrar.
        $aAtributos = array(
            'ATTR_AUTOCOMMIT',
            'ATTR_CASE',
            'ATTR_CLIENT_VERSION',
            'ATTR_CONNECTION_STATUS',
            'ATTR_DRIVER_NAME',
            'ATTR_ERRMODE',
            'ATTR_ORACLE_NULLS',
            'ATTR_PERSISTENT',
            'ATTR_SERVER_INFO',
            'ATTR_SERVER_VERSION',
            'ATTR_DEFAULT_FETCH_MODE'
        );

        /* ==================== Conexión correcta ==================== */
        try {
            // Crea una nueva conexión PDO usando los parámetros definidos en confDBPDO.php
            $miDB = new PDO(RUTA, USUARIO, PASS);

            echo "<h2>Conexión completada correctamente</h2>";
            echo "<h4>Atributos de la conexión:</h4>";

            // Recorre el array de atributos y los imprime usando getAttribute()
            foreach ($aAtributos as $atributo) {
                // constant("PDO::$atributo") convierte el nombre del atributo en constante PDO válida
                print "<b>Atributo '$atributo': </b>" . $miDB->getAttribute(constant("PDO::$atributo")) . "<br>";
            }

        } catch (PDOException $ex) {
            // Captura cualquier excepción relacionada con PDO y muestra el mensaje de error y código.
            echo "Error de conexión a la base de datos: " . $ex->getMessage();
            echo "Codigo de error: " . $ex->getCode();
        }

        /* ==================== Conexión con error de driver ==================== */
        echo "<h2>Conexión erronea por error al encontrar el driver</h2>";

        // Constantes con parámetros erróneos (driver incorrecto)
        const ruta2 = 'error:host=localhost;dbname=DBAMNDWESProyectoTema4';
        const usuario2 = 'userAMNDWESProyectoTema4';
        const pass2 = 'CD97ertvct$E';

        try {
            $miDB = new PDO(ruta2, usuario2, pass2);

            echo "<h2>Conexión completada correctamente</h2>";
            echo "<h4>Atributos de la conexión:</h4>";

            foreach ($aAtributos as $atributo) {
                print "<b>Atributo '$atributo': </b>" . $miDB->getAttribute(constant("PDO::$atributo")) . "<br>";
            }

        } catch (Exception $ex) {
            // Captura cualquier excepción (en este caso, error de driver)
            echo "Error " . $ex->getMessage() . "<br><br>";
            echo "Codigo de error: " . $ex->getCode();
        }

        /* ==================== Conexión con contraseña incorrecta ==================== */
        echo "<h2>Conexión erronea por contraseña incorrecta</h2>";

        // Constantes con contraseña incorrecta
        const ruta3 = 'mysql:host=localhost;dbname=DBAMNDWESProyectoTema4';
        const usuario3 = 'userAMNDWESProyectoTema4';
        const pass3 = 'gdfsghsdfg';

        try {
            $miDB = new PDO(ruta3, usuario3, pass3);

            echo "<h2>Conexión completada correctamente</h2>";
            echo "<h4>Atributos de la conexión:</h4>";

            foreach ($aAtributos as $atributo) {
                print "<b>Atributo '$atributo': </b>" . $miDB->getAttribute(constant("PDO::$atributo")) . "<br>";
            }

        } catch (PDOException $ex) {
            // Captura error de contraseña incorrecta
            echo "Password incorrecto: " . $ex->getMessage();
            echo "Codigo de error: " . $ex->getCode();
        }

        // Se destruye la conexión para liberar recursos
        unset($miDB);
        ?>        
    </main>
</body>
</html>