CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES
<!DOCTYPE html>
<html lang="es">
    <head>
    <meta charset="UTF-8">
    <link rel="icon" type="image/png" href="../webroot/media/favicon/favicon-32x32.png">
    <link rel="stylesheet" href="../webroot/css/estilos.css">
    <title>Gonzalo Junquera Lorenzo</title>
        <style>
        main{
            margin: 20px 20px 20px 100px;
        }
        h3{
            margin-top: 20px;
            margin-bottom: 10px;
        }
        .rojo{color: red;}
        .azul{color: #0401a5ff}
    </style>
</head>
<body>
    <div id="aviso">CURSO 2025/2026 -- DAW 2 -- I.E.S. LOS SAUCES</div>
    <nav>
        <div><a href="../indexProyectoTema4.php">Volver</a></div>
        <h2> <a href="../indexProyectoTema4.php">Tema 4</a> - Ejercicio 01 MySQLi</h2>
        <h2>Gonzalo Junquera Lorenzo</h2>
    </nav>
    <main>
       <?php
       /**
        * @author: Gonzalo Junquera Lorenzo
        * @since: 01/11/2025
        * 1. 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.
        */

        // preparación de los datos de conexión para luego usarlos en el mysqli
        const HOSTNAME = "localhost";
        const USERNAME = 'userGJLDWESProyectoTema4';
        // const PASSWORD = 'paso';
        const PASSWORD = '5813Libro-Puro';
        const DATABASE = 'DBGJLDWESProyectoTema4';

        // Aqui están las propiedades https://www.php.net/manual/es/class.mysqli.php
        $aPropiedadesMySQLi = [
            // --- Propiedades de Información de Conexión / Versión ---
            'host_info'        => 'Información del Host (Tipo de conexión)',
            'server_info'      => 'Información del Servidor (Versión en cadena)',
            'server_version'   => 'Versión del Servidor (Entero)',
            'protocol_version' => 'Versión del Protocolo MySQL',
            'client_info'      => 'Información del Cliente (Librería)',
            'client_version'   => 'Versión del Cliente (Entero)',
            'thread_id'        => 'ID de Hilo en el Servidor',

            // --- Propiedades de Estado de la Conexión ---
            'connect_errno'    => 'Código de Error de Conexión',
            'connect_error'    => 'Mensaje de Error de Conexión',

            // --- Propiedades de Resultados de Consultas (Se llenan después de una operación) ---
            'affected_rows'    => 'Filas Afectadas por la última consulta',
            'insert_id'        => 'ID Generado por la última inserción (AUTO_INCREMENT)',
            'field_count'      => 'Número de campos devueltos',
            'warning_count'    => 'Número de Advertencias de la última consulta',
            'info'             => 'Información Adicional de la última consulta (e.g., filas encontradas)',

            // --- Propiedades de Error de la Última Consulta (Se llenan después de una operación) ---
            'errno'            => 'Código de Error de la Última Consulta',
            'error'            => 'Mensaje de Error de la Última Consulta',
            'error_list'       => 'Lista completa de errores de la última consulta',
            'sqlstate'         => 'Código SQLSTATE de la Última Consulta',
        ];
      
        /* activar notificación */
        $controlador = new mysqli_driver();
        $controlador->report_mode = MYSQLI_REPORT_ALL;
        /* Con esto hacemos que salte la excepcion automáticamente, ya que sino no saltaría por el catch */

        // Establecimiento de conexión con valores correctos
        echo '<h3>Conexión a '.DATABASE.' correctamente: </h3>';

        try {
            $miDB = new mysqli(HOSTNAME,USERNAME,PASSWORD,DATABASE);

            echo 'Conectado a la BBDD con éxito';
            echo '<br><br>';

            echo '<p><b>Atributos de la conexión: </b></p>';
            // --- Mostrar Propiedades de MySQLi ---
            foreach ( $aPropiedadesMySQLi as $propiedad => $descripcion ) {
                // Accedemos a las propiedades públicas del objeto $miDB (MySQLi)
                try {
                    echo "$descripcion ($propiedad): <span class=\"azul\">" . $miDB->$propiedad . "</span><br>";
                } catch (mysqli_sql_exception $miExceptionMySQLi) {
                    echo "$descripcion ($propiedad): <span class=\"rojo\">";
                    echo 'Error: '.$miExceptionMySQLi->getMessage();
                    echo ' Código de error: '.$miExceptionMySQLi->getCode();
                    echo "</span><br>";
                }
                
            }

        } catch (mysqli_sql_exception $miExceptionMySQLi) {
            echo 'Error: '.$miExceptionMySQLi->getMessage();
            echo '<br>';
            echo 'Código de error: '.$miExceptionMySQLi->getCode();
        } finally {
            $miDB->close();
        }

        // Establecimiento de conexión con valores incorrectos
        echo '<h3>Conexión a '.DATABASE.' correctamente: </h3>';

        try {
            $miDB = new mysqli(HOSTNAME,USERNAME,"error",DATABASE);

            echo 'Conectado a la BBDD con éxito';
            echo '<br><br>';

            echo '<p><b>Atributos de la conexión: </b></p>';
            // --- Mostrar Propiedades de MySQLi ---
            foreach ( $aPropiedadesMySQLi as $propiedad => $descripcion ) {
                // Accedemos a las propiedades públicas del objeto $miDB (MySQLi)
                try {
                    echo "$descripcion ($propiedad): <span class=\"azul\">" . $miDB->$propiedad . "</span><br>";
                } catch (mysqli_sql_exception $miExceptionMySQLi) {
                    echo "$descripcion ($propiedad): <span class=\"rojo\">";
                    echo 'Error: '.$miExceptionMySQLi->getMessage();
                    echo ' Código de error: '.$miExceptionMySQLi->getCode();
                    echo "</span><br>";
                }
                
            }

        } catch (mysqli_sql_exception $miExceptionMySQLi) {
            echo 'Error: '.$miExceptionMySQLi->getMessage();
            echo '<br>';
            echo 'Código de error: '.$miExceptionMySQLi->getCode();
        } finally {
            $miDB->close();
        }
       ?>
    </main>
</body>
</html>