🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

[Introducción a PHP] Conceptos Básicos para Conectar PHP y Bases de Datos (SQL) para Mostrar una Lista

En artículos anteriores, hemos aprendido la sintaxis básica de PHP, como arrays, bucles y funciones. Sin embargo, en los sitios web reales, los datos como avisos y listas de productos generalmente no se escriben directamente en los archivos PHP, sino que se gestionan en una caja fuerte especial llamada base de datos.

"¿Cómo conecto PHP y una base de datos?", "¿Cómo muestro los datos obtenidos con SQL en una página web?" Estas son grandes barreras por las que pasan muchos creadores web. Este artículo resolverá esas dudas. ¡Experimentemos todo el proceso de conexión a una base de datos desde PHP y la visualización de los datos obtenidos con SQL como una tabla usando un bucle `foreach`, con un código completo que funciona al copiar y pegar. Una vez que sientas la emoción del momento en que PHP y SQL se conectan, ¡seguro que querrás probarlo con tus propios datos!

Para preparar tu entorno para ejecutar PHP (entorno de desarrollo), si aún no has configurado XAMPP, por favor consulta ¡[Introducción a PHP] Guía completa para descargar e instalar XAMPP!. ¡Después de la instalación, simplemente coloca tu archivo PHP en la carpeta especificada (como `htdocs`) y estarás listo!

1. Los 3 Pasos de la Colaboración entre PHP y la Base de Datos

El flujo de cómo PHP interactúa con una base de datos se compone a grandes rasgos de los siguientes tres pasos.

  1. Conectar (Connect): PHP saluda a la base de datos diciendo "¿Hola, podemos hablar?" y establece una conexión.
  2. Comando (Execute Query): PHP da una orden a la base de datos en un lenguaje llamado SQL, diciendo "Por favor, dame estos datos de esta tabla".
  3. Mostrar (Display Results): PHP convierte los datos recibidos de la base de datos a HTML y los muestra en la página web.

Esta vez, utilizaremos un mecanismo llamado PDO (PHP Data Objects) para realizar estos tres pasos de una manera segura y moderna. PDO es una característica estándar de PHP que puede manejar varios tipos de bases de datos y también es excelente en términos de seguridad, lo que lo convierte en un conocimiento esencial en el desarrollo actual de PHP.

2. ¡A la práctica! Mostrando una Lista de Productos desde una Base de Datos

Ahora, vamos a escribir el código para obtener y mostrar una lista de productos desde una base de datos.

Paso A: Preparación de la Base de Datos y la Tabla

Primero, necesitas preparar una tabla para almacenar los datos. En una herramienta de gestión de bases de datos como phpMyAdmin, ejecuta la siguiente sentencia SQL para crear una tabla `products` y registrar tres elementos de datos de muestra.

CREATE TABLE products (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  price INT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO products (name, price) VALUES
('Portátil de alto rendimiento', 120000),
('Auriculares inalámbricos', 15000),
('Monitor 4K', 45000);

Paso B: Obtener y Mostrar Datos con PHP

Una vez que la tabla esté lista, es el turno de PHP. El siguiente código es un ejemplo completo que incluye todo, desde la conexión a la base de datos, la obtención de datos, hasta la visualización en HTML. Si subes este archivo a tu servidor, puedes comprobar el resultado en tu navegador.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Lista de Productos</title>
    <style>
        body { font-family: sans-serif; padding: 20px; }
        h1 { border-bottom: 2px solid #0056b3; }
        .product-table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        .product-table th, .product-table td { border: 1px solid #ddd; padding: 12px; text-align: left; }
        .product-table th { background-color: #f2f2f2; }
        .product-table tr:nth-child(even) { background-color: #f9f9f9; }
        .error-message { color: red; font-weight: bold; border: 1px solid red; padding: 10px; }
    </style>
</head>
<body>
    <h1>Lista de Productos</h1>

    <?php
    // --- 1. Conexión a la base de datos ---
    $db_host = 'localhost';          // Nombre de host del servidor de la base de datos
    $db_name = 'your_database_name'; // Nombre de la base de datos
    $db_user = 'your_username';      // Nombre de usuario de la base de datos
    $db_pass = 'your_password';      // Contraseña de la base de datos

    try {
        // Crear un objeto PDO para conectarse a la base de datos
        $pdo = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_user, $db_pass);
        // Establecer el modo de error para lanzar excepciones
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // --- 2. Ejecución de SQL ---
        // Consulta para obtener todos los datos de la tabla products
        $stmt = $pdo->prepare("SELECT id, name, price FROM products ORDER BY id");
        $stmt->execute();

        // --- 3. Obtención y visualización de resultados ---
        // Obtener todos los datos como un array asociativo
        $products = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if ($products) {
            echo '<table class="product-table">';
            echo '<tr><th>ID de Producto</th><th>Nombre del Producto</th><th>Precio</th></tr>';
            
            // Bucle con foreach
            foreach ($products as $product) {
                echo '<tr>';
                echo '<td>' . htmlspecialchars($product['id']) . '</td>';
                echo '<td>' . htmlspecialchars($product['name']) . '</td>';
                echo '<td>€' . number_format($product['price']) . '</td>';
                echo '</tr>';
            }
            echo '</table>';
        } else {
            echo '<p>No se encontraron datos de productos.</p>';
        }

    } catch (PDOException $e) {
        // Manejo de errores de conexión o consulta
        echo '<div class="error-message">Error de base de datos: ' . htmlspecialchars($e->getMessage()) . '</div>';
    }
    ?>
</body>
</html>

Importante: Antes de ejecutar el código anterior, asegúrate de reemplazar `your_database_name`, `your_username` y `your_password` con la configuración de tu propio entorno.

Si accedes a este archivo en tu navegador y la lista de productos se muestra en la tabla, ¡has tenido éxito! Este es el momento en que PHP interactúa con la base de datos y genera dinámicamente el resultado como HTML.

3. Puntos a tener en cuenta

La integración de bases de datos es muy potente, pero hay algunos puntos a tener en cuenta. La seguridad y el manejo de errores son particularmente importantes.

Manejo de Errores (sintaxis try...catch)

Si la contraseña de la base de datos es incorrecta o hay un error en la sintaxis SQL, el programa se detendrá con un error. Al encerrar todo el proceso en un bloque `try...catch`, incluso si ocurre un error, puedes capturarlo y mostrar un mensaje de error personalizado en lugar de que el sitio se quede en blanco.

<?php
try {
    // Proceso para conectarse a la base de datos y obtener datos
    // Si ocurre un error dentro de este bloque...
    $pdo = new PDO("mysql:host=localhost;dbname=wrong_db;charset=utf8", "user", "pass");

} catch (PDOException $e) {
    // ...se ejecutará el procesamiento aquí
    echo "Ocurrió un error: " . $e->getMessage();
    // En un sitio real, solo mostrarías un mensaje simple al usuario,
    // y registrarías los detalles del error en un archivo de log.
    // exit(); // Detiene el proceso
}
?>

Este mecanismo evita confundir a los usuarios cuando ocurre un error inesperado y facilita a los desarrolladores la identificación de la causa del error.

Contramedidas contra la Inyección SQL

Al construir una sentencia SQL basada en la entrada del usuario (como palabras clave de búsqueda), corres el riesgo de un ataque muy peligroso llamado **inyección SQL**. Este es un ataque en el que se inyectan sentencias SQL maliciosas para manipular la base de datos de forma indebida.

Las **sentencias preparadas** de PDO (el método que usa `prepare()` y `execute()`) son la contramedida más efectiva contra esta inyección SQL. Aunque esta vez no haya entrada del usuario, deberías acostumbrarte a usar siempre este método.

4. Resumen

En este artículo, hemos aprendido los tres pasos básicos para integrar PHP y bases de datos (Conectar, Comando, Mostrar) de principio a fin usando PDO. Poder obtener y mostrar dinámicamente datos de un almacenamiento externo como una base de datos, en lugar de escribirlos directamente en un archivo PHP, es un gran paso adelante en el desarrollo de aplicaciones web.

Una vez que domines esta forma básica, puedes aplicar diversas variaciones, como añadir una cláusula `WHERE` para filtrar datos por una condición específica, o integrarlo con un formulario para registrar datos con una sentencia `INSERT`. ¡Te animamos a que pruebes varias cosas con tus propias tablas y datos!