Módulo 4: Fundamentos de PHP

Conexión con MySQL en PHP

Lección 20 de 33 del Curso Roadmap Learning Laravel

Duración: 1.5 horas
Nivel: Principiante (requiere conocimientos de HTML, CSS, JavaScript, y PHP básico: variables, formularios, POO)
Objetivo: Aprender a conectar PHP con una base de datos MySQL, realizar consultas básicas (SELECT, INSERT), y manejar datos dinámicos, como preparación para el desarrollo backend con Laravel.
Materiales necesarios:

  • Computadora con:
    • Servidor local con XAMPP, WAMP, o MAMP (incluye MySQL/MariaDB, descarga gratuita desde sus sitios oficiales).
    • Editor de texto (recomendado: VS Code, descarga gratuita desde code.visualstudio.com).
    • phpMyAdmin (incluido en XAMPP) o un cliente MySQL como MySQL Workbench.
  • Navegador web (Chrome, Firefox, etc.).
  • Alternativa: Usa un entorno online como Repl.it con soporte MySQL (limitado) o un servidor remoto con PHP/MySQL.
    Contexto: La conexión con MySQL permite almacenar y recuperar datos dinámicos en aplicaciones web, una habilidad esencial para manejar usuarios, productos, o contenido en Laravel.

Introducción a MySQL y PHP (15 minutos)

Explicación:

MySQL es un sistema de gestión de bases de datos relacionales que almacena datos en tablas. PHP se conecta a MySQL para realizar operaciones como guardar o recuperar información.

Conceptos clave:

  • Base de datos: Conjunto de tablas (por ejemplo, “tienda”).
  • Tabla: Estructura con columnas (campos) y filas (registros).
    • Ejemplo: Tabla “usuarios” con columnas id, nombre, email.
  • Conexión PHP-MySQL: Usa funciones o clases para interactuar con la base de datos.
  • Consultas básicas:
    • SELECT: Recupera datos.
    • INSERT: Añade registros.

Métodos de conexión en PHP:

  • MySQLi (MySQL Improved): Orientado a objetos o procedimental, ampliamente usado.
  • PDO (PHP Data Objects): Más flexible, soporta múltiples bases de datos.
  • En esta lección, usaremos MySQLi orientado a objetos por simplicidad.

Por qué es importante:

  • En Laravel, los modelos y el ORM (como Eloquent) simplifican las consultas a MySQL, pero entender las bases es crucial para manejar datos manualmente o depurar.

Punto clave: Conectar PHP con MySQL permite crear aplicaciones dinámicas, como sistemas de registro o tiendas online.

Actividad rápida (3 minutos):

Piensa en una aplicación web (por ejemplo, un foro). Escribe en papel 1 dato que guardaría en una tabla MySQL. Ejemplo:

  • Tabla “mensajes”: Columna contenido.

Configurar conexión con MySQL (20 minutes)

Explicación:

Para conectar PHP con MySQL, necesitamos configurar el servidor y establecer una conexión.

Paso 1: Configurar MySQL:

  • Con XAMPP:
    1. Inicia Apache y MySQL desde el panel de control.
    2. Accede a phpMyAdmin: http://localhost/phpmyadmin.
    3. Crea una base de datos:
      • Nombre: prueba.
      • Codificación: utf8_general_ci.
    4. Crea una tabla usuarios:
      CREATE TABLE usuarios (
          id INT AUTO_INCREMENT PRIMARY KEY,
          nombre VARCHAR(100) NOT NULL,
          email VARCHAR(100) NOT NULL
      );
      • id: Clave primaria, autoincremental.
      • nombre, email: Campos de texto.

Paso 2: Conexión en PHP (MySQLi):

  • Usa la clase mysqli.
  • Parámetros:
    • Host: localhost (o IP del servidor).
    • Usuario: root (por defecto en XAMPP, sin contraseña).
    • Contraseña: "" (vacía en XAMPP).
    • Base de datos: prueba.

Código de conexión:

<?php
$servidor = "localhost";
$usuario = "root";
$contrasena = "";
$base_datos = "prueba";

$conexion = new mysqli($servidor, $usuario, $contrasena, $base_datos);

if ($conexion->connect_error) {
    die("Error de conexión: " . $conexion->connect_error);
}
echo "Conexión exitosa.";
$conexion->close();
?>

Cómo funciona:

  • new mysqli(...): Crea el objeto de conexión.
  • connect_error: Verifica errores.
  • die(): Detiene la ejecución si falla.
  • close(): Cierra la conexión (buena práctica).

Cómo probarlo:

  1. Guarda como conexion.php en htdocs.
  2. Accede: http://localhost/conexion.php.
  3. Verifica: "Conexión exitosa." o un mensaje de error.
  4. Usa phpMyAdmin para confirmar que la base de datos prueba existe.

Punto clave: Una conexión estable es el primer paso para interactuar con MySQL, similar a la configuración de bases de datos en Laravel.

Actividad rápida (5 minutos):

Modifica el código de conexión (en papel o editor) para usar una base de datos llamada tienda. Solución sugerida:

$base_datos = "tienda";

Consultas básicas: INSERT y SELECT (30 minutes)

Explicación:

Aprendamos a insertar y recuperar datos con INSERT y SELECT.

Consulta INSERT:

  • Añade un registro a una tabla.
  • Sintaxis: INSERT INTO tabla (columna1, columna2) VALUES (valor1, valor2).

Consulta SELECT:

  • Recupera datos.
  • Sintaxis: SELECT columnas FROM tabla [WHERE condición].

Ejemplo práctico (como pide la lección):

Guardar un registro en la tabla “usuarios”:

<!DOCTYPE html>
<html lang="es">
<head>
    <title>Guardar Usuario</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 20px auto;
            text-align: center;
        }
        h1 {
            color: #2c3e50;
        }
        input, button {
            padding: 10px;
            margin: 5px;
            font-size: 1rem;
        }
        button {
            background-color: #2c3e50;
            color: white;
            border: none;
            cursor: pointer;
        }
        .resultado {
            margin-top: 20px;
        }
        .error {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Registrar Usuario</h1>
    <form method="post">
        <input type="text" name="nombre" placeholder="Nombre" required>
        <input type="email" name="email" placeholder="Email" required>
        <button type="submit">Guardar</button>
    </form>
    <?php
    $servidor = "localhost";
    $usuario = "root";
    $contrasena = "";
    $base_datos = "prueba";

    $conexion = new mysqli($servidor, $usuario, $contrasena, $base_datos);
    if ($conexion->connect_error) {
        echo "<p class='error'>Error de conexión: " . $conexion->connect_error . "</p>";
        exit;
    }

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $nombre = $conexion->real_escape_string($_POST["nombre"]);
        $email = $conexion->real_escape_string($_POST["email"]);

        if (!empty($nombre) && !empty($email)) {
            $sql = "INSERT INTO usuarios (nombre, email) VALUES ('$nombre', '$email')";
            if ($conexion->query($sql) === TRUE) {
                echo "<p class='resultado'>Usuario guardado: $nombre ($email).</p>";
            } else {
                echo "<p class='error'>Error al guardar: " . $conexion->error . "</p>";
            }
        } else {
            echo "<p class='error'>Por favor, completa todos los campos.</p>";
        }
    }

    $conexion->close();
    ?>
</body>
</html>

Cómo funciona:

  • <form method="post">: Envía nombre y email.
  • $conexion->real_escape_string(): Escapa caracteres para evitar inyecciones SQL.
  • INSERT INTO usuarios: Añade el registro.
  • $conexion->query(): Ejecuta la consulta.
  • Mensajes de éxito o error según el resultado.

Cómo probarlo:

  1. Asegúrate de que la tabla usuarios existe en la base de datos prueba (ver Paso 1).
  2. Guarda como guardar_usuario.php en htdocs.
  3. Accede: http://localhost/guardar_usuario.php.
  4. Prueba:
    • Ingresa "Ana" y "ana@correo.com" → "Usuario guardado: Ana (ana@correo.com)".
    • Deja campos vacíos → "Por favor, completa todos los campos.".
    • Ingresa datos inválidos (por ejemplo, email sin "@") → Depende de la validación HTML (required).
  5. Verifica en phpMyAdmin que el registro se añadió a usuarios.
  6. Revisa php_error.log (en XAMPP) si hay errores.

Resultado esperado:

  • Un formulario para ingresar nombre y email.
  • Al enviar, guarda el registro en MySQL y muestra un mensaje de éxito.
  • Errores si la conexión falla o los campos están vacíos.

Punto clave: INSERT guarda datos y SELECT los recupera, habilidades esenciales para aplicaciones dinámicas como Laravel.

Actividad rápida (5 minutos):

Modifica el ejemplo (en papel o editor) para mostrar un mensaje si el email ya existe (usando SELECT antes de INSERT). Solución sugerida:

$sql = "SELECT id FROM usuarios WHERE email='$email'";
$resultado = $conexion->query($sql);
if ($resultado->num_rows > 0) {
    echo "<p class='error'>El email ya está registrado.</p>";
} else {
    // Continúa con INSERT
}

Resumen y preparación para la tarea (25 minutes)

Resumen:

  • MySQL: Base de datos relacional para almacenar datos.
  • Conexión: Usar mysqli con host, usuario, contraseña, y base de datos.
  • Consultas:
    • INSERT: Añade registros.
    • SELECT: Recupera datos.
  • Ejemplo: Formulario que guarda un usuario en la tabla usuarios.
  • Estos conceptos son la base para interactuar con bases de datos en Laravel usando Eloquent.

Preparación para la tarea:

La tarea pide crear un script PHP que liste todos los usuarios de la tabla usuarios.

  • Estrategia:
    • Conecta a la base de datos prueba.
    • Usa SELECT * FROM usuarios para obtener todos los registros.
    • Recorre los resultados con un bucle (por ejemplo, while).
    • Muestra los datos en una página HTML (por ejemplo, en una tabla).
  • Lógica básica:
    $sql = "SELECT * FROM usuarios";
    $resultado = $conexion->query($sql);
    while ($fila = $resultado->fetch_assoc()) {
        echo $fila["nombre"] . ", " . $fila["email"];
    }

Punto clave: La tarea refuerza SELECT y el manejo de resultados, habilidades clave para mostrar datos en Laravel.


Tarea práctica: Crea un script que liste todos los usuarios de una tabla

Instrucciones:

  1. Crea un programa PHP que conecte a la base de datos prueba y muestre todos los registros de la tabla usuarios (columnas: id, nombre, email).
  2. Usa:
    • Una conexión MySQLi.
    • Una consulta SELECT * FROM usuarios.
    • Un bucle para recorrer los resultados (fetch_assoc()).
    • HTML para mostrar los datos (por ejemplo, en una tabla).
  3. Asegúrate de:
    • Manejar errores de conexión.
    • Mostrar un mensaje si no hay usuarios.
    • Incluir estilos básicos con CSS.
  4. Usa el siguiente código como guía:
<!DOCTYPE html>
<html lang="es">
<head>
    <title>Listar Usuarios</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 20px auto;
            text-align: center;
        }
        h1 {
            color: #2c3e50;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            padding: 10px;
            border: 1px solid #ccc;
        }
        th {
            background-color: #2c3e50;
            color: white;
        }
        .sin-datos {
            margin-top: 20px;
            font-style: italic;
        }
        .error {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Lista de Usuarios</h1>
    <?php
    $servidor = "localhost";
    $usuario = "root";
    $contrasena = "";
    $base_datos = "prueba";

    $conexion = new mysqli($servidor, $usuario, $contrasena, $base_datos);
    if ($conexion->connect_error) {
        echo "<p class='error'>Error de conexión: " . $conexion->connect_error . "</p>";
        exit;
    }

    $sql = "SELECT * FROM usuarios";
    $resultado = $conexion->query($sql);

    if ($resultado->num_rows > 0) {
        echo "<table>";
        echo "<tr><th>ID</th><th>Nombre</th><th>Email</th></tr>";
        while ($fila = $resultado->fetch_assoc()) {
            echo "<tr>";
            echo "<td>" . $fila["id"] . "</td>";
            echo "<td>" . htmlspecialchars($fila["nombre"]) . "</td>";
            echo "<td>" . htmlspecialchars($fila["email"]) . "</td>";
            echo "</tr>";
        }
        echo "</table>";
    } else {
        echo "<p class='sin-datos'>No hay usuarios registrados.</p>";
    }

    $conexion->close();
    ?>
</body>
</html>
  1. Prueba el archivo:
    • Requisito previo: Asegúrate de que la tabla usuarios existe (ver Paso 1 de la lección). Opcionalmente, usa el formulario del ejemplo para añadir registros.
    • Con XAMPP:
      • Guarda como listar_usuarios.php en htdocs.
      • Accede: http://localhost/listar_usuarios.php.
    • Con Repl.it: Pega el código (necesita soporte MySQL configurado).
    • Prueba:
      • Si hay usuarios (por ejemplo, tras usar guardar_usuario.php), muestra una tabla con sus datos.
      • Si la tabla está vacía, muestra "No hay usuarios registrados.".
      • Verifica en phpMyAdmin que los datos coinciden.
    • Revisa php_error.log (en XAMPP) para depurar errores.

Ejemplo de solución esperada:

El código anterior es funcional. En el navegador:

  • Una página con título "Lista de Usuarios".
  • Una tabla estilizada con columnas ID, Nombre, Email, mostrando todos los registros.
  • Un mensaje si no hay datos.

Tiempo estimado: 30-40 minutos (puedes hacerlo después de la lección).
Entregable: Archivo listar_usuarios.php que muestre los usuarios de la tabla. Puedes compartir el código o describirlo para que lo revise.

Consejo: Prueba añadir usuarios con el formulario del ejemplo antes de listar, y usa htmlspecialchars() para evitar problemas con caracteres especiales.

Evaluación de Conocimientos: Conexión y Consultas MySQL en PHP

¡Es momento de evaluar tus conocimientos sobre la conexión y las consultas MySQL en PHP! Este examen consta de 10 preguntas con opciones múltiples que cubren temas clave como la configuración de la conexión, ejecución de consultas (SELECT, INSERT) y manejo de datos en tablas. Contesta con atención y demuestra tu comprensión de cómo integrar bases de datos en tus aplicaciones web. ¡Buena suerte!

1. ¿Qué método de PHP se usó para conectar con MySQL en la lección?

2. En el ejemplo, ¿qué consulta SQL se usó para guardar un registro en la tabla usuarios?

3. ¿Qué parámetro NO es necesario para establecer una conexión MySQLi?

4. En la tarea, ¿qué consulta SQL se usó para listar todos los usuarios?

5. ¿Qué método MySQLi escapa caracteres para evitar inyecciones SQL?

6. En la tarea, ¿qué método MySQLi se usó para recorrer los resultados de la consulta?

7. ¿Qué propiedad de MySQLi indica si hubo un error en la conexión?

8. En el ejemplo, ¿qué columnas tenía la tabla usuarios?

9. En la tarea, ¿qué estructura HTML se recomendó para mostrar los usuarios?

10. ¿Qué método MySQLi cierra la conexión a la base de datos?

© Copyright Cursos Laravel :: 2025 Términos y condiciones