php-como-conectar-php-a-una-base-de-datos-con-pdo

Cómo conectar PHP a una base de datos con PDO

  • 3 min

PDO es una interfaz orientada a objetos para acceder a bases de datos desde PHP mediante una API común.

Antiguamente (y en muchos tutoriales viejos) se usaban funciones mysql_connect (ya eliminadas) o la extensión mysqli. Sin embargo, en el desarrollo profesional actual, PDO (PHP Data Objects) es el rey.

¿Por qué PDO y no mysqli?

Imagina que mysqli es un cargador que solo sirve para teléfonos iPhone. Si mañana quieres cambiar a Android, tienes que tirar el cargador y comprar otro. PDO es como un cargador universal: funciona con casi cualquier base de datos.

CaracterísticaMySQLiPDO (Recomendado)
Bases de datosMySQL / MariaDBVarios motores mediante drivers (MySQL, PostgreSQL, SQLite…)
Estilo de códigoAPI orientada a objetos y procedimentalAPI orientada a objetos común entre drivers
SeguridadSoporta sentencias preparadasSoporta sentencias preparadas y parámetros con nombre
PortabilidadAPI específica de MySQLAPI común; el SQL y algunas opciones aún pueden requerir cambios

La cadena de conexión (DSN)

Para conectar, necesitamos definir el DSN (Data Source Name). Es simplemente un string que le dice a PDO: “Qué tipo de base de datos es, dónde está y cómo se llama”.

Formato típico: mysql:host=localhost;dbname=mi_tienda;charset=utf8mb4

  • host: La dirección del servidor (suele ser localhost o una IP).
  • dbname: El nombre de tu base de datos.
  • charset: Muy importante. Usa siempre utf8mb4 (no solo utf8). Esto asegura que puedas guardar emojis (😊) y caracteres especiales sin que se rompa nada.

Código de conexión segura y robusta

Vamos a crear una conexión que, si falla, nos avise correctamente (usando try-catch del Módulo 5) y que se configure automáticamente para ser segura.

<?php
// Configuración (Idealmente esto vendría de $_ENV, como vimos en el Módulo 6)
$host = 'localhost';
$db   = 'curso_php';
$user = 'root';
$pass = ''; // En XAMPP suele estar vacío, en MAMP es 'root'
$charset = 'utf8mb4';

// Construimos el DSN
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

// Opciones de configuración de PDO (Vitales para seguridad y comodidad)
$options = [
    // Si hay error, lanza una Excepción (en lugar de fallar en silencio)
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    // Los datos vendrán siempre como Arrays Asociativos (más fácil de leer)
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    // Pedir al driver de MySQL sentencias preparadas nativas
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    // Intentamos conectar
    $pdo = new PDO($dsn, $user, $pass, $options);
    echo "¡Conexión exitosa a la base de datos!";
    
} catch (PDOException $e) {
    // Si falla, capturamos el error específico de PDO
    // IMPORTANTE: En producción, nunca hagas 'echo' del error directo al usuario,
    // regístralo en un log interno.
    die("Error de conexión: " . $e->getMessage());
}
Copied!

Desglosando las opciones ($options)

Ese array de opciones es lo que diferencia a un principiante de un pro:

  1. ERRMODE_EXCEPTION: Hace que los fallos de PDO lancen excepciones. Es el modo predeterminado desde PHP 8, pero declararlo deja explícita la intención y ayuda si el código se ejecuta en otro entorno.
  2. FETCH_ASSOC: Cuando pidamos datos, nos los dará así: ['nombre' => 'Juan']. Si no ponemos esto, por defecto los duplica: [0 => 'Juan', 'nombre' => 'Juan'], gastando el doble de memoria.
  3. EMULATE_PREPARES => false: Pide al driver de MySQL que use sentencias preparadas nativas. Tanto el modo nativo como el emulado separan parámetros y SQL cuando se usan correctamente; elige según las capacidades y limitaciones del driver.