19: Conexión PDO

 

Tutorial 19: Conexión PDO

¿Qué es PDO?

PDO (PHP Data Objects) es una extensión de PHP que define una interfaz consistente para acceder a bases de datos. Proporciona una capa de abstracción que permite trabajar con diferentes sistemas de bases de datos (MySQL, PostgreSQL, SQLite, etc.) usando las mismas funciones.

Configuración de la base de datos

Antes de comenzar con la conexión, necesitamos identificar los datos de acceso a nuestra base de datos:

  1. Host: El servidor donde está alojada la base de datos

  2. Database name: Nombre de la base de datos

  3. Username: Usuario con permisos de acceso

  4. Password: Contraseña del usuario

En PHPMyAdmin podemos encontrar esta información en la sección "Cuentas de usuarios". Para un servidor local típico:

  • Host: localhost

  • Usuario: root

  • Contraseña: (vacío)

Estructura del Proyecto

Vamos a trabajar en la capa MODELO, siguiendo la arquitectura de capas donde el modelo es la última capa y la más protegida:

text
mi_proyecto/
├── models/
│   ├── Conexion.php
│   └── Crud.php

Código de Conexión PDO

Archivo: models/Conexion.php

php
<?php

class Conexion {
    
    /**
     * Método público para establecer la conexión a la base de datos
     * @return PDO Objeto de conexión PDO
     */
    public function conectar() {
        try {
            // Parámetros de conexión
            $host = "localhost";
            $dbname = "cursophp";
            $username = "root";
            $password = "";
            
            // Crear instancia de PDO con los parámetros necesarios
            $link = new PDO(
                "mysql:host=$host;dbname=$dbname", 
                $username, 
                $password
            );
            
            // Configurar el manejo de errores
            $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            
            // Mensaje de éxito (opcional, solo para pruebas)
            echo "✅ Conexión exitosa a la base de datos: $dbname";
            
            return $link;
            
        } catch (PDOException $e) {
            // Capturar y mostrar errores de conexión
            die("❌ Error de conexión: " . $e->getMessage());
        }
    }
}

// Código de prueba temporal (se puede eliminar después)
/*
$a = new Conexion();
$a->conectar();
*/
?>

Archivo: models/Crud.php

php
<?php

// Incluir la clase Conexion
require_once 'Conexion.php';

class Crud extends Conexion {
    
    /**
     * Ejemplo de método que utiliza la conexión
     */
    public function mostrarMensaje() {
        // Obtener la conexión heredada
        $conexion = $this->conectar();
        
        // Aquí irán las operaciones CRUD
        echo "<br>🔧 Preparado para realizar operaciones CRUD";
    }
}

// Código de prueba
$crud = new Crud();
$crud->mostrarMensaje();

?>

Explicación detallada del código

1. Clase Conexion

  • Encapsula toda la lógica de conexión

  • Método conectar() público para ser accesible desde otras clases

2. Objeto PDO

  • Requiere 3 parámetros principales:

    php
    new PDO("mysql:host=localhost;dbname=cursophp", "root", "")
    • Primer parámetro: Tipo de BD + host + nombre BD

    • Segundo parámetro: Usuario

    • Tercer parámetro: Contraseña

3. Manejo de errores

  • Usamos try-catch para capturar excepciones PDO

  • Configuramos el modo de error con setAttribute()

  • Mensajes descriptivos para identificar problemas

4. Herencia en Crud

  • Crud extends Conexion hereda el método conectar()

  • Esto permite reutilizar la conexión en todas las operaciones de BD

Pruebas de conexión

Prueba exitosa:

text
✅ Conexión exitosa a la base de datos: cursophp
🔧 Preparado para realizar operaciones CRUD

Prueba con errores comunes:

  1. Base de datos incorrecta:
    Cambiar $dbname = "cursophp2";

    text
    ❌ Error de conexión: SQLSTATE[HY000] [1049] Unknown database 'cursophp2'
  2. Usuario incorrecto:
    Cambiar $username = "root2";

    text
    ❌ Error de conexión: SQLSTATE[HY000] [1045] Access denied for user 'root2'@'localhost'
  3. Contraseña incorrecta:
    Agregar $password = "12345";

    text
    ❌ Error de conexión: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost'

Buenas prácticas implementadas

  1. Nombres de bases de datos: Usar minúsculas y guiones bajos

  2. Manejo de errores: Siempre capturar excepciones

  3. Separación de capas: Conexión en modelo, no en vistas

  4. Herencia: Aprovechar POO para reutilizar código

  5. Configuración PDO: Establecer modo de error para mejor depuración

Próximos pasos

En el siguiente tutorial, comenzaremos a implementar las operaciones CRUD:

  • Create: Insertar registros

  • Read: Leer/consultar registros

  • Update: Actualizar registros

  • Delete: Eliminar registros

Nota importante

Cuando migres a un hosting remoto, deberás actualizar estos datos:

  • Host: Puede ser "localhost" o un servidor específico

  • Usuario: El que hayas creado en el hosting

  • Contraseña: La configurada para ese usuario

  • Base de datos: Puede incluir prefijos (ej: "bm260_cursophp")

Comentarios

Entradas más populares de este blog

token

¿Qué es un token y cómo se utiliza en una API?

Generación de Credenciales API