Skip to content

3.1 Introducción a las bases de datos

3.1 Introducción a las bases de datos en PHP

Enunciado general:

En este tema haremos un repaso de los conceptos clave sobre las bases de datos, especialmente enfocados en cómo interactuar con ellas desde PHP. Aunque ya se han cubierto los conceptos básicos de bases de datos en módulos anteriores, vamos a repasar lo que necesitas saber para trabajar con bases de datos en PHP, cómo instalar y configurar el entorno adecuado, y cómo conectar tu aplicación PHP a una base de datos MySQL (relacional) y NoSQL (como MongoDB). También realizaremos algunas pruebas de conexión para asegurarnos de que el entorno está listo.

Objetivo del tema:

  1. Repasar los conceptos de bases de datos que ya deberían ser familiares para los estudiantes, especialmente el modelo relacional y NoSQL.
  2. Preparar el entorno de desarrollo en PHP para trabajar con bases de datos, asegurándonos de que se tiene todo lo necesario instalado.
  3. Realizar pruebas de conexión a bases de datos tanto en MySQL como en MongoDB para verificar que el entorno está correctamente configurado.

Conceptos clave que cubriremos:

  1. Modelo relacional y NoSQL:

    • Bases de datos relacionales (RDBMS): En estas bases de datos, los datos se organizan en tablas con filas y columnas. Se utilizan claves primarias y foráneas para establecer relaciones entre las tablas. Ejemplo: MySQL, PostgreSQL.
    • Bases de datos NoSQL: Son bases de datos no basadas en tablas. Pueden almacenar datos en forma de documentos (por ejemplo, MongoDB) o en formato clave-valor, columnares, etc. Son más flexibles en cuanto a la estructura de los datos y se utilizan en aplicaciones que requieren alta escalabilidad o manejo de grandes volúmenes de datos no estructurados.
  2. Instalación necesaria para trabajar con bases de datos en PHP:

    • MySQL: Se debe tener instalado MySQL o MariaDB en el servidor.
    • MongoDB: Necesitaremos instalar MongoDB si vamos a trabajar con bases de datos NoSQL.
    • PHP y extensiones: Asegúrate de tener PHP instalado con las extensiones necesarias para trabajar con MySQLi (para conexiones MySQL) y MongoDB.
      • Para MySQL: mysqli o PDO_MySQL.
      • Para MongoDB: mongo o mongodb (extensiones).
  3. Acceso a bases de datos en PHP:

    • Conexión a MySQL utilizando MySQLi y PDO.
    • Conexión a MongoDB utilizando la extensión de MongoDB para PHP.

Prueba de conexión a bases de datos

1. Conexión a MySQL usando MySQLi

  • Requisitos: Tener instalado MySQL o MariaDB en el servidor. Asegúrate de tener un servidor en marcha.

  • Código de prueba con MySQLi:

    Conexión a MySQL usando MySQLi
    <?php
    // Parámetros de conexión
    $host = "localhost";
    $usuario = "root";  // Cambia esto si usas otro usuario
    $contrasena = "";   // Cambia esto si usas otra contraseña
    $base_de_datos = "test";  // Asegúrate de tener esta base de datos creada
    
    // Crear conexión
    $conexion = new mysqli($host, $usuario, $contrasena, $base_de_datos);
    
    // Comprobar la conexión
    if ($conexion->connect_error) {
        die("Conexión fallida: " . $conexion->connect_error);
    } else {
        echo "Conexión exitosa a la base de datos MySQL!";
    }
    
    // Cerrar conexión
    $conexion->close();
    ?>
    

  • Explicación del código:

  • Usamos MySQLi para conectar con una base de datos MySQL.
  • new mysqli($host, $usuario, $contrasena, $base_de_datos) crea la conexión.
  • Si la conexión falla, mostramos el error utilizando connect_error.
  • Si la conexión es exitosa, mostramos un mensaje de éxito.

2. Conexión a MySQL usando PDO

  • Código de prueba con PDO:

    Conexión a MySQL usando PDO
    <?php
    // Parámetros de conexión
    $host = "localhost";
    $usuario = "root";  // Cambia esto si usas otro usuario
    $contrasena = "";   // Cambia esto si usas otra contraseña
    $base_de_datos = "test";  // Asegúrate de tener esta base de datos creada
    
    try {
        // Crear conexión
        $conexion = new PDO("mysql:host=$host;dbname=$base_de_datos", $usuario, $contrasena);
        // Establecer el modo de error de PDO
        $conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Conexión exitosa a la base de datos MySQL usando PDO!";
    } catch (PDOException $e) {
        echo "Conexión fallida: " . $e->getMessage();
    }
    ?>
    

  • Explicación del código:

  • Usamos PDO para conectar con MySQL.
  • Se establece el modo de error a PDO::ERRMODE_EXCEPTION para que se lance una excepción en caso de error.
  • Si la conexión es exitosa, mostramos un mensaje de éxito.

3. Conexión a MongoDB (NoSQL)

  • Requisitos: Asegúrate de tener MongoDB instalado en el servidor y la extensión de PHP para MongoDB configurada.

  • Código de prueba con MongoDB:

Conexión a MongoDB
<?php
// Parámetros de conexión
$host = getenv('MONGODB_HOST');  // docker_mongo
$puerto = getenv('MONGODB_PORT'); // 27017

try {
    // Crear conexión
    $conexion = new MongoDB\Driver\Manager("mongodb://$host:$puerto");
    echo "Conexión exitosa a MongoDB!";
} catch (MongoDB\Driver\Exception\Exception $e) {
    echo "Conexión fallida: " . $e->getMessage();
}
?>
  • Explicación del código:

  • Usamos la extensión MongoDB\Driver\Manager para conectar con MongoDB.

  • En este caso, localhost y 27017 son los valores predeterminados para MongoDB. Si tienes configuraciones diferentes, cámbialas en los parámetros.

Conclusión

Este tema proporciona un repaso de los conceptos clave relacionados con las bases de datos y prepara el entorno de desarrollo en PHP para trabajar con bases de datos tanto relacionales (como MySQL) como NoSQL (como MongoDB). Hemos visto cómo conectar a estas bases de datos usando MySQLi, PDO, y MongoDB. En el siguiente punto, profundizaremos más en las operaciones básicas de bases de datos y cómo trabajar con ellas en PHP.


Anexo I: Preparación del entorno para MongoDB

Este anexo te guiará paso a paso para configurar MongoDB en un contenedor Docker y asegurarte de que tu contenedor PHP pueda conectarse a él correctamente utilizando Nginx como servidor web.


1. Crear el contenedor para MongoDB

Paso 1: Descargar la imagen de MongoDB

Ejecuta el siguiente comando para descargar la imagen oficial de MongoDB desde Docker Hub:

docker pull mongo

Paso 2: Crear y ejecutar el contenedor de MongoDB

Una vez descargada la imagen, crea y ejecuta el contenedor de MongoDB con el siguiente comando:

docker run -d --name mongo_container -p 27017:27017 mongo

Este comando:

  • Crea un contenedor en segundo plano (-d) con el nombre mongo_container.
  • Expone el puerto 27017 del contenedor al puerto 27017 de tu máquina local, lo que permite la comunicación entre tu contenedor PHP y MongoDB.

Paso 3: Verificar la conexión a MongoDB

Para verificar que MongoDB está funcionando correctamente, ejecuta:

docker exec -it mongo_container bash

Esto te llevará a la consola interactiva de MongoDB dentro del contenedor. Si ves un prompt similar a:

>

Significa que MongoDB está funcionando correctamente. Para salir de la consola de MongoDB, escribe exit.


2. Configurar el contenedor PHP para conectar con MongoDB

Nota

Si has seguido los pasos de este curso para crear los contenedores de PHP y Nginx, recuerda que en el contenedor de PHP ya debes tener instalados los controladores para MySQL y MongoDB. Puedes verificarlo ejecutando el siguiente comando:

docker exec -it nombre_del_contenedor_php php -m
Busca mongodb en la lista de módulos instalados. Si no está, sigue los pasos a continuación para instalarlo. Si está puedes omitir este anexo e ir directamento al punto 4.

Paso 1: Acceder al contenedor PHP

Si tu contenedor PHP está corriendo, puedes acceder a él usando el siguiente comando:

docker exec -it nombre_del_contenedor_php bash

Esto te llevará al entorno de terminal de tu contenedor PHP.

Paso 2: Instalar la extensión MongoDB para PHP

Si la extensión MongoDB para PHP no está instalada en tu contenedor PHP, sigue estos pasos para instalarla:

  1. Actualizar los paquetes de la imagen:

Ejecuta el siguiente comando para actualizar los paquetes:

apt-get update
  1. Instalar las dependencias necesarias:

MongoDB requiere algunas bibliotecas que deben instalarse antes de instalar la extensión para PHP:

apt-get install -y libmongoc-1.0-0 libjemalloc2
  1. Instalar la extensión de MongoDB para PHP:

Ahora, instala la extensión de MongoDB para PHP usando PECL: !!! note "instalación" aparecerán mensajes que nos preguntarán si queremos instalar algunas dependencias. Acepta todas las opciones predeterminadas. O Acepta sus valores por defecto.

pecl install mongodb
  1. Habilitar la extensión en PHP:

Después de instalar la extensión, debemos habilitarla editando los archivos php.ini. En Nginx, los archivos php.ini suelen estar ubicados en /etc/php/{versión}/fpm/php.ini para PHP-FPM (que es el que utiliza Nginx).

Para habilitar la extensión, abre el archivo php.ini en el editor de texto:

  1. Localizar el archivo php.ini. Debe estar ubicado en una ruta similar a:

bash /usr/local/etc/php/php.ini

Utiliza `nano` para editar el archivo, si no está instalado, puedes usar `vi` o cualquier otro editor de texto que prefieras, o instalalo con el siguiente comando:

bash apt-get install nano

bash nano /usr/local/etc/php/php.ini

Agrega la siguiente línea en el apartado de extensiones:

bash extension=mongodb.so

  1. Reiniciar PHP-FPM:

Reiniciar el contenedor PHP para aplicar los cambios:

service php-fpm restart

O si estás usando Docker, puedes reiniciar el contenedor PHP:

docker restart nombre_del_contenedor_php

3. Verificar la instalación de la extensión MongoDB

Para asegurarte de que la extensión de MongoDB se haya instalado correctamente, ejecuta el siguiente comando:

php -m | grep mongodb

Si ves mongodb en la salida, significa que la extensión está correctamente instalada.


4. Probar la conexión a MongoDB desde PHP

Ahora que tienes MongoDB en un contenedor y PHP configurado para conectarse a él, realizaremos una prueba de conexión.

Paso 1: Crear el archivo PHP para probar la conexión

Crea un archivo PHP llamado test_mongo_connection.php con el siguiente contenido:

Prueba de conexión a MongoDB
<?php 
// Parámetros de conexión a MongoDB
$host = 'localhost';
$puerto = '27017';

try {
    // Crear conexión
    $conexion = new MongoDB\Driver\Manager("mongodb://$host:$puerto");

    echo "Conexión exitosa a MongoDB!";
} catch (MongoDB\Driver\Exception\Exception $e) {
    echo "Error de conexión: " . $e->getMessage();
}
?>

Paso 2: Colocar el archivo PHP en el contenedor

Asegúrate de colocar el archivo test_mongo_connection.php en el directorio correcto dentro del contenedor PHP, por ejemplo en /var/www/html.

Paso 3: Ejecutar la prueba de conexión

Accede al contenedor PHP con el siguiente comando:

docker exec -it nombre_del_contenedor_php bash

Dirígete al directorio donde colocaste el archivo test_mongo_connection.php y ejecútalo con el siguiente comando:

php test_mongo_connection.php

Si la conexión es exitosa, deberías ver el siguiente mensaje:

Conexión exitosa a MongoDB!

Si hay un problema con la conexión, se mostrará un mensaje de error que podrás utilizar para diagnosticar el problema.


5. Resumen

En este anexo, hemos cubierto los pasos necesarios para: 1. Configurar y ejecutar MongoDB en un contenedor Docker. 2. Instalar la extensión MongoDB para PHP en un contenedor PHP que usa Nginx. 3. Verificar la instalación de MongoDB y realizar una prueba de conexión desde PHP.

Ahora deberías tener tu entorno completamente preparado para trabajar con MongoDB en PHP, y podrás empezar a realizar consultas y operaciones en bases de datos NoSQL utilizando este entorno.