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:
- Inicia Apache y MySQL desde el panel de control.
- Accede a phpMyAdmin: http://localhost/phpmyadmin.
- Crea una base de datos:
- Nombre: prueba.
- Codificación: utf8_general_ci.
- 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:
- Guarda como conexion.php en htdocs.
- Accede: http://localhost/conexion.php.
- Verifica: "Conexión exitosa." o un mensaje de error.
- 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:
- Asegúrate de que la tabla usuarios existe en la base de datos prueba (ver Paso 1).
- Guarda como guardar_usuario.php en htdocs.
- Accede: http://localhost/guardar_usuario.php.
- 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).
- Verifica en phpMyAdmin que el registro se añadió a usuarios.
- 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:
- 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).
- 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).
- Asegúrate de:
- Manejar errores de conexión.
- Mostrar un mensaje si no hay usuarios.
- Incluir estilos básicos con CSS.
- 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>
- 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.