🔌 Conexión a Base de Datos MySQL con MySQLi

1️⃣ Configuración de la Conexión

Para conectarnos a la base de datos `db_dataBase`, necesitamos definir los parámetros de conexión:

<?php // Datos de conexión $host = 'localhost'; $usuario = 'root'; $password = 'gAsDev=7A1B??'; $base_datos = 'db_dataBase'; // Crear conexión $conexion = new mysqli($host, $usuario, $password, $base_datos); // Verificar conexión if ($conexion->connect_error) { die("❌ Error en la conexión: " . $conexion->connect_error); } else { echo "✅ Conexión establecida con éxito"; } // Configurar UTF-8 $conexion->set_charset("utf8mb4"); ?>

2️⃣ Creación de la Base de Datos

Ejecuta este código en **phpMyAdmin** para crear la base de datos y la tabla usuarios:

CREATE DATABASE IF NOT EXISTS db_dataBase; USE db_dataBase; CREATE TABLE IF NOT EXISTS usuarios ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE ); INSERT INTO usuarios (nombre, email) VALUES ('Juan Pérez', 'juan.perez@example.com'), ('Ana Gómez', 'ana.gomez@example.com'), ('Carlos López', 'carlos.lopez@example.com');

3️⃣ Consulta de Datos con PHP

Para obtener datos de la base de datos, utilizamos una consulta SELECT en PHP:

<?php // Consulta SQL para seleccionar ID, nombre y email de la tabla usuarios $sql = "SELECT id, nombre, email FROM usuarios"; // Ejecutar la consulta en la base de datos $resultado = $conexion->query($sql); // Verificar si hay resultados if ($resultado->num_rows > 0) { // Recorrer y mostrar cada fila obtenida while ($fila = $resultado->fetch_assoc()) { echo "ID: " . $fila["id"] . " - Nombre: " . $fila["nombre"] . " - Email: " . $fila["email"] . "
"; } } else { // Mostrar mensaje si no hay datos en la tabla echo "⚠️ No hay datos en la tabla 'usuarios'."; } ?>

4️⃣ Mostrar Datos en una Tabla

Si queremos mostrar los datos en una tabla HTML:

<table border="1"> <tr> <th>ID</th> <th>Nombre</th> <th>Email</th> </tr> <?php while ($fila = $resultado->fetch_assoc()) { echo "<tr>"; echo "<td>" . $fila["id"] . "</td>"; echo "<td>" . $fila["nombre"] . "</td>"; echo "<td>" . $fila["email"] . "</td>"; echo "</tr>"; } ?> </table>

5️⃣ Cierre de Conexión

Para liberar recursos, siempre cerramos la conexión:

<?php $conexion->close(); ?>

6️⃣ Código Completo en una Página PHP

Aquí tienes todo el código junto para probarlo en un archivo `conexion.php`:

<?php $host = 'localhost'; $usuario = 'root'; $password = 'gAsDev=7A1B??'; $base_datos = 'db_dataBase'; $conexion = new mysqli($host, $usuario, $password, $base_datos); if ($conexion->connect_error) { die("❌ Error en la conexión: " . $conexion->connect_error); } $conexion->set_charset("utf8mb4"); $sql = "SELECT id, nombre, email FROM usuarios"; $resultado = $conexion->query($sql); echo "<h2>Lista de Usuarios</h2>"; echo "<table border='1'><tr><th>ID</th><th>Nombre</th><th>Email</th></tr>"; while ($fila = $resultado->fetch_assoc()) { echo "<tr><td>" . $fila["id"] . "</td><td>" . $fila["nombre"] . "</td><td>" . $fila["email"] . "</td></tr>"; } echo "</table>"; $conexion->close(); ?>

🔍 Explicación del Código PHP

1️⃣ Consulta SQL

Se define una consulta SQL que selecciona tres campos (`id`, `nombre` y `email`) de la tabla `usuarios`. 📌 **Objetivo:** Obtener la lista de usuarios registrados en la base de datos.

2️⃣ Ejecución de la Consulta

Se ejecuta la consulta en la base de datos mediante el método `$conexion->query($sql)`. 📌 **Objetivo:** Pedir a MySQL que devuelva los datos de la tabla `usuarios`.

3️⃣ Verificación de Datos

Se usa `if ($resultado->num_rows > 0)` para verificar si la consulta devolvió registros. 📌 **Objetivo:** Comprobar si hay usuarios almacenados en la base de datos.

4️⃣ Recorrido de los Resultados

Si hay datos, se utiliza un bucle `while ($fila = $resultado->fetch_assoc())` para recorrer cada fila obtenida. 📌 **Objetivo:** Leer cada usuario y mostrar su información.

5️⃣ Impresión de los Datos

Dentro del bucle, se usa `echo` para mostrar el ID, el nombre y el email de cada usuario en pantalla. 📌 **Objetivo:** Presentar la información de forma clara y organizada.

6️⃣ Mensaje Alternativo

Si no hay usuarios registrados, se muestra el mensaje `⚠️ No hay datos en la tabla 'usuarios'.` 📌 **Objetivo:** Informar al usuario cuando la tabla está vacía.


🔗 Configurar una Aplicación para Usar Caracteres en Español

Si tu aplicación muestra caracteres extraños en lugar de letras con tildes (á, é, í, ó, ú) o la letra "ñ", es probable que haya un problema con la configuración de codificación.

1️⃣ Configurar la Base de Datos en Español

Asegúrate de que tu base de datos MySQL use el **conjunto de caracteres UTF-8**:

CREATE DATABASE mi_base_de_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2️⃣ Configurar la Conexión en PHP

Al conectarte a la base de datos en PHP, usa `$conn->set_charset("utf8mb4")` para evitar problemas con los caracteres especiales:

<?php $conn = new mysqli("localhost", "usuario", "contraseña", "mi_base_de_datos"); if ($conn->connect_error) { die("❌ Conexión fallida: " . $conn->connect_error); } $conn->set_charset("utf8mb4"); ?>

3️⃣ Configurar el Archivo HTML

En la cabecera del archivo HTML, asegúrate de incluir la línea:

<meta charset="UTF-8">

4️⃣ Configurar el Encabezado en PHP

Para que todas las páginas usen la codificación correcta, puedes incluir este código en el archivo principal de tu aplicación:

header('Content-Type: text/html; charset=utf-8');

📌 Ejemplo Práctico: Mostrar una Tabla con Datos en Español

A continuación, te mostramos un ejemplo de cómo insertar y mostrar correctamente caracteres en español desde una base de datos:

🎯 Paso 1: Crear una Tabla en MySQL

CREATE TABLE Usuarios ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(255) NOT NULL, comentario TEXT, email VARCHAR(255) NOT NULL ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

🎯 Paso 2: Insertar Datos con Caracteres Especiales

INSERT INTO Usuarios (nombre, comentario, email) VALUES ('José Pérez', '¡Hola! ¿Cómo estás?', 'jose@example.com'), ('María Gómez', 'Bienvenido a la aplicación.', 'maria@example.com');

🎯 Paso 3: Mostrar los Datos en una Página PHP

<?php include('conexion.php'); $sql = "SELECT * FROM Usuarios"; $result = $conn->query($sql); echo "<table border='1'><tr><th>Nombre</th><th>Comentario</th><th>Email</th></tr>"; while ($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . htmlspecialchars($row['nombre'], ENT_QUOTES, 'UTF-8') . "</td>"; echo "<td>" . htmlspecialchars($row['comentario'], ENT_QUOTES, 'UTF-8') . "</td>"; echo "<td>" . htmlspecialchars($row['email'], ENT_QUOTES, 'UTF-8') . "</td>"; echo "</tr>"; } echo "</table>"; ?>

🔌 Conexión a Base de Datos MySQL con PDO

Este ejemplo te enseñará a conectar una base de datos **MySQL** con PHP utilizando **PDO (PHP Data Objects)**. También incluye un **formulario** para agregar usuarios y una **tabla** para mostrar los datos en tiempo real.

1️⃣ Conexión a la Base de Datos

Primero, definimos las credenciales y establecemos la conexión usando **try-catch** para manejar errores.

$host = 'localhost'; $db = 'db_ejemplo'; $user = 'root'; $pass = 'tu_contraseña'; try { $conexion = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass); $conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "✅ Conexión exitosa a la base de datos."; } catch (PDOException $e) { echo "❌ Error de conexión: " . $e->getMessage(); }

2️⃣ Insertar Datos desde un Formulario

<div class="form-container"> <form action="" method="POST"> <label for="nombre">Nombre:</label> <input type="text" name="nombre" required> <label for="email">Email:</label> <input type="email" name="email" required> <button type="submit" name="guardar">Guardar Usuario</button> </form>

3️⃣ Consultar y Mostrar Datos

<table> <thead> <tr> <th>ID</th> <th>Nombre</th> <th>Email</th> </tr> </thead> <tbody> <?php // Conexión a la base de datos $host = 'localhost'; $db = 'db_ejemplo'; $user = 'root'; $pass = 'tu_contraseña'; try { $conexion = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass); $conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Insertar usuario si el formulario fue enviado if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["guardar"])) { $nombre = $_POST["nombre"]; $email = $_POST["email"]; $sql = "INSERT INTO usuarios (nombre, email) VALUES (:nombre, :email)"; $stmt = $conexion->prepare($sql); $stmt->bindParam(":nombre", $nombre); $stmt->bindParam(":email", $email); $stmt->execute(); echo "<p style='color: green;'>✅ Usuario agregado correctamente.</p>"; } // Mostrar usuarios $sql = "SELECT id, nombre, email FROM usuarios"; $stmt = $conexion->query($sql); while ($fila = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "<tr> <td>{$fila['id']}</td> <td>{$fila['nombre']}</td> <td>{$fila['email']}</td> </tr>"; } } catch (PDOException $e) { echo "<p style='color: red;'>❌ Error: " . $e->getMessage() . "</p>"; } ?> </tbody> </table>

🔍 Comparación: PDO vs MySQLi

📌 Beneficios de usar PDO

💡 Para usar esta conexión en otros archivos: Basta con incluir include "conexion.php"; al inicio y usar $conexion para interactuar con la base de datos.

🔄 Comparación entre PDO y MySQLi

📌 PDO (PHP Data Objects)

📌 MySQLi (MySQL Improved)

🛠️ ¿Cuál elegir? 🤔

⚠️ Problemas al cambiar de MySQLi a PDO (o viceversa)

  • Sintaxis diferente: El código para ejecutar consultas es distinto en cada método.
  • Manejo de errores distinto: MySQLi usa `mysqli_error()`, mientras que PDO maneja errores con `try-catch`.
  • Cambios en transacciones: La forma de manejar `commit()` y `rollback()` varía.

💡 En proyectos nuevos, **PDO** es la opción recomendada por su flexibilidad y seguridad.

⬅ Volver a la Página Principal