Bases de datos con PHP
Bienvenido a la penúltima lección de nuestro curso básico de PHP 8. Hoy nos metemos con las bases de datos, el corazón de cualquier aplicación dinámica. Aprenderás a conectar PHP con MySQL, guardar datos, mostrarlos y más. Si ya manejas arrays y gestión de errores, esto es el broche de oro para tus proyectos. Todo va a ser claro, práctico y con ejemplos que te van a flipar. ¡Empecemos!
¿Por qué usar bases de datos con PHP?
Una base de datos es como una biblioteca súper organizada donde guardas y encuentras información rápido. PHP es un experto en trabajar con bases de datos como MySQL, PostgreSQL o SQLite, permitiéndote crear sistemas dinámicos, desde blogs hasta tiendas online. Hoy nos enfocaremos en MySQL, uno de los más populares, para que conectes, insertes y consultes datos como pro.
Preparando el terreno
Antes de conectar PHP con MySQL, necesitas:
- MySQL instalado: Asegúrate de tener XAMPP o un servidor MySQL corriendo.
- Una base de datos: Vamos a crear una llamada curso_php8.
- Credenciales: Usaremos rootcomo usuario y una contraseña (ajusta según tu configuración).
Paso 1: Crear la base de datos
Abre MySQL Workbench, phpMyAdmin o la terminal de MySQL y ejecuta:
CREATE DATABASE curso_php8;
Esto crea la base de datos curso_php8.
Paso 2: Crear una tabla
Dentro de curso_php8, crea una tabla alumnos con esta consulta:
CREATE TABLE alumnos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(45),
    edad INT,
    carrera VARCHAR(200)
);
Esto define una tabla con un ID automático y campos para nombre, edad y carrera.
Probando bases de datos en acción
¡Manos a la obra! Crea un archivo base_de_datos.php en curso_php8 (dentro de C:\xampp\htdocs) y prueba esto:
Ejemplo 1: Conexión a MySQL
<?php
    $servername = "localhost";
    $username = "root";
    $password = ""; // Ajusta si tienes una contraseña
    $dbname = "curso_php8";
    // Crear conexión
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Verificar conexión
    if ($conn->connect_error) {
        die("Error de conexión: " . $conn->connect_error);
    }
    echo "¡Conexión exitosa a MySQL!<br>";
    // Cerrar conexión
    $conn->close();
?>
Abre http://localhost/curso_php8/base_de_datos.php. Verás:
¡Conexión exitosa a MySQL!
¿Qué pasó?
- Usamos mysqlipara conectar con el servidor MySQL.
- Verificamos si hubo errores con connect_error.
- Cerramos la conexión con close()para liberar recursos.
Ejemplo 2: Insertar datos
<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "curso_php8";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Error de conexión: " . $conn->connect_error);
    }
    // Insertar datos
    $sql = "INSERT INTO alumnos (nombre, edad, carrera) 
            VALUES ('Jesus', 30, 'Programador')";
    
    if ($conn->query($sql) === TRUE) {
        echo "Datos insertados correctamente<br>";
    } else {
        echo "Error al insertar: " . $conn->error . "<br>";
    }
    $conn->close();
?>
Resultado:
Datos insertados correctamente
¿Qué pasó?
- Ejecutamos una consulta INSERTpara añadir un alumno.
- Verificamos si funcionó con $conn->query().
- Para evitar datos repetidos, ejecuta este código solo una vez o limpia la tabla antes.
Ejemplo 3: Mostrar datos
<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "curso_php8";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Error de conexión: " . $conn->connect_error);
    }
    // Consultar datos
    $sql = "SELECT * FROM alumnos";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            echo "Nombre: " . $row["nombre"] . " | Edad: " . $row["edad"] . 
                 " | Carrera: " . $row["carrera"] . "<br>";
        }
    } else {
        echo "No hay resultados<br>";
    }
    $conn->close();
?>
Resultado (si insertaste antes):
Nombre: Jesus | Edad: 30 | Carrera: Programador
¿Qué pasó?
- Usamos SELECT *para obtener todos los registros.
- Recorrimos los resultados con fetch_assoc()para mostrarlos.
- Si la tabla está vacía, mostramos «No hay resultados».
Ejemplo práctico
Ejemplo: CRUD básico
Creamos un archivo alumnos_crud.php para conectar, insertar, mostrar, actualizar y eliminar datos:
<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "curso_php8";
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Error de conexión: " . $conn->connect_error);
    }
    // Insertar
    $sql = "INSERT INTO alumnos (nombre, edad, carrera) 
            VALUES ('Ana López', 20, 'Diseño Gráfico')";
    $conn->query($sql);
    // Mostrar
    echo "Lista de alumnos:<br>";
    $sql = "SELECT * FROM alumnos";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            echo "ID: " . $row["id"] . " | Nombre: " . $row["nombre"] . 
                 " | Edad: " . $row["edad"] . " | Carrera: " . $row["carrera"] . "<br>";
        }
    }
    // Actualizar
    $sql = "UPDATE alumnos SET nombre='Ana Gómez', edad=21 WHERE id=2";
    if ($conn->query($sql) === TRUE) {
        echo "Registro actualizado<br>";
    } else {
        echo "Error al actualizar: " . $conn->error . "<br>";
    }
    // Eliminar
    $sql = "DELETE FROM alumnos WHERE id=1";
    if ($conn->query($sql) === TRUE) {
        echo "Registro eliminado<br>";
    } else {
        echo "Error al eliminar: " . $conn->error . "<br>";
    }
    $conn->close();
?>
Resultado (depende de los datos):
Lista de alumnos: ID: 1 | Nombre: Jesus | Edad: 30 | Carrera: Programador ID: 2 | Nombre: Ana López | Edad: 20 | Carrera: Diseño Gráfico Registro actualizado Registro eliminado
¿Qué pasó?
- Hicimos un CRUD (Create, Read, Update, Delete) básico.
- Insertamos un alumno, mostramos la lista, actualizamos uno y eliminamos otro.
- Siempre cerramos la conexión para no gastar recursos.
Ejercicios para practicar
¡Ve a curso_php8 y prueba estos retos:
- Actualizar registro
 Creaactualizar_alumno.php:
?php
       $servername = "localhost";
       $username = "root";
       $password = "";
       $dbname = "curso_php8";
       $conn = new mysqli($servername, $username, $password, $dbname);
       if ($conn->connect_error) {
           die("Error de conexión: " . $conn->connect_error);
       }
       $sql = "UPDATE alumnos SET nombre='Carlos Ruiz', edad=22 WHERE id=2";
       if ($conn->query($sql) === TRUE) {
           echo "Registro actualizado correctamente<br>";
       } else {
           echo "Error al actualizar: " . $conn->error . "<br>";
       }
       $conn->close();
   ?>
- Eliminar registro
 Creaeliminar_alumno.php:
<?php
       $servername = "localhost";
       $username = "root";
       $password = "";
       $dbname = "curso_php8";
       $conn = new mysqli($servername, $username, $password, $dbname);
       if ($conn->connect_error) {
           die("Error de conexión: " . $conn->connect_error);
       }
       $sql = "DELETE FROM alumnos WHERE id=2";
       if ($conn->query($sql) === TRUE) {
           echo "Registro eliminado correctamente<br>";
       } else {
           echo "Error al eliminar: " . $conn->error . "<br>";
       }
       $conn->close();
   ?>
Ejecuta en localhost/curso_php8/ y verifica los cambios en phpMyAdmin.
Consejos para no enredarte
- Verifica credenciales: Asegúrate de que $usernamey$passwordcoincidan con tu configuración de MySQL.
- Cierra conexiones: Usa $conn->close()para evitar consumir recursos.
- Evita duplicados: Antes de insertar, verifica si el dato ya existe o usa claves únicas.
- Usa consultas preparadas: Para datos de usuarios (como formularios), evita inyecciones SQL con mysqli_prepare().
- Debuguea errores: Revisa $conn->errorpara entender qué falló.
¡EL final de curso!
¡Gran trabajo, máquina! Ahora sabes conectar PHP con MySQL, guardar datos, mostrarlos, actualizarlos y eliminarlos como un verdadero pro. asta aqui el final de curso. Si algo no te queda claro, déjame un comentario .
Lo que aprendiste hoy:
- Bases de datos: Conectaste PHP con MySQL como un campeón.
- CRUD básico: Insertaste, mostraste, actualizaste y eliminaste datos.
- Ejemplos vivos: Creaste una tabla de alumnos y jugaste con ella.
- Practicaste: Modificaste y borraste registros como pro.
- Tip del pro: Cierra conexiones y usa consultas preparadas para apps seguras.

