Qué es PDO en PHP y por qué deberías usarlo siempre 🔐
Cuando empiezas a trabajar con bases de datos en PHP, tarde o temprano te encuentras con una decisión importante:
¿Usar consultas simples… o trabajar con PDO?
Muchos desarrolladores principiantes comienzan con métodos antiguos o inseguros, y solo después descubren que existe una forma mucho mejor de conectarse a la base de datos.
Esa forma se llama PDO.
Y si estás desarrollando aplicaciones modernas en PHP, usar PDO no es opcional:
es la forma correcta de hacerlo.
¿Qué es PDO en PHP?
PDO significa:
PHP Data Objects
Es una extensión de PHP que permite conectarse a bases de datos de forma:
- Segura
- Flexible
- Moderna
- Reutilizable
Con PDO puedes trabajar con:
- MySQL
- PostgreSQL
- SQLite
- Oracle
- SQL Server
- Y muchos otros motores
Todo usando la misma interfaz.
¿Para qué sirve PDO?
PDO se usa para:
- Conectar PHP con una base de datos.
- Ejecutar consultas SQL.
- Insertar, actualizar y eliminar registros.
- Evitar ataques de inyección SQL.
- Manejar errores de forma profesional.
En cualquier aplicación web seria, PDO es una herramienta básica.
Un ejemplo sencillo sin PDO (forma insegura)
Muchos principiantes empiezan con algo así:
$codigo = $_GET['codigo']; $sql = "SELECT * FROM empleados WHERE codigo = '$codigo'"; $result = mysqli_query($conexion, $sql);
El problema es que esto permite inyección SQL.
Un atacante podría enviar algo como:
EMP001' OR '1'='1
Y la consulta se convertiría en:
SELECT * FROM empleados WHERE codigo = 'EMP001' OR '1'='1'
Resultado: el sistema devuelve todos los registros.
El mismo ejemplo usando PDO (forma segura)
Con PDO y consultas preparadas:
$stmt = $pdo->prepare("SELECT * FROM empleados WHERE codigo = ?");
$stmt->execute([$codigo]);
$empleado = $stmt->fetch();
Aquí:
- La consulta está separada de los datos.
- El valor se envía de forma segura.
- No se puede inyectar código SQL.
La idea clave: consultas preparadas
La principal ventaja de PDO son las consultas preparadas.
Funcionan en dos pasos:
- Preparar la consulta (estructura SQL).
- Enviar los datos por separado.
Ejemplo:
$stmt = $pdo->prepare("INSERT INTO empleados (codigo, nombres) VALUES (?, ?)");
$stmt->execute(['EMP010', 'Carlos Ruiz']);
Esto evita que los datos se interpreten como código SQL.
Un poco de historia: por qué nació PDO
Antes de PDO, PHP tenía varias formas distintas de conectarse a bases de datos:
mysql_*(obsoleto)mysqli- Extensiones específicas por motor
El problema era:
- Código difícil de mantener.
- Incompatibilidad entre motores.
- Falta de seguridad en muchos casos.
Para resolver esto, se creó PDO como:
- Una interfaz unificada.
- Con soporte para múltiples bases de datos.
- Con consultas preparadas integradas.
Desde entonces, PDO se convirtió en el estándar moderno.
Ventajas principales de usar PDO
1. Seguridad contra inyección SQL
Las consultas preparadas separan:
- El código SQL
- De los datos del usuario
Esto evita ataques clásicos.
2. Soporte para múltiples bases de datos
Con PDO puedes cambiar de motor sin reescribir todo el código.
Ejemplo:
De MySQL:
mysql:host=localhost;dbname=mi_db
A PostgreSQL:
pgsql:host=localhost;dbname=mi_db
El resto del código puede mantenerse igual.
3. Manejo profesional de errores
Con PDO puedes activar excepciones:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
Esto permite:
- Detectar errores fácilmente.
- Evitar fallos silenciosos.
- Depurar más rápido.
4. Código más limpio y reutilizable
Con PDO puedes:
- Centralizar la conexión.
- Reutilizar consultas.
- Mantener un código más ordenado.
Ejemplo típico:
require 'includes/con.php';
Y ya puedes usar $pdo en todo el sistema.
Ejemplo completo de conexión con PDO
Este es un archivo típico de conexión:
<?php
$host = 'localhost';
$db = 'floopware_casos';
$user = 'usuario';
$pass = 'password';
$charset = 'utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass, $options);
} catch (\PDOException $e) {
die("Error de conexión: " . $e->getMessage());
}
Este archivo es el corazón del CRUD.
Diferencia entre PDO y mysqli
Característica PDO mysqli
Soporta múltiples motores Sí No (solo MySQL)
Consultas preparadas Sí Sí
Interfaz unificada Sí No
Recomendado para proyectos nuevos Sí Menos común
Hoy en día, la mayoría de los proyectos modernos usan PDO.
¿Cuándo deberías usar PDO?
La respuesta corta:
Siempre.
Especialmente si:
- Estás empezando un proyecto nuevo.
- Trabajas con bases de datos.
- Construyes un CRUD.
- Haces sistemas con login.
- Desarrollas APIs.
Errores comunes al usar PDO
Algunos errores típicos de principiantes:
1. No usar consultas preparadas
Ejemplo incorrecto:
$pdo->query("SELECT * FROM empleados WHERE codigo = '$codigo'");
Siempre usa:
$pdo->prepare(...)
2. No activar el modo de excepciones
Sin esto, los errores pasan desapercibidos.
Siempre incluye:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
3. No usar utf8mb4
Esto puede causar problemas con:
- Tildes
- Caracteres especiales
- Emojis
PDO en el caso de estudio del CRUD
En el CRUD de este blog, PDO se usa para:
- Insertar empleados.
- Listarlos.
- Editarlos.
- Eliminarlos.
Todo con:
- Consultas preparadas.
- Validación básica.
- Protección CSRF.
Esto convierte un simple CRUD en un proyecto realista y seguro.
Conclusión:
PDO no es solo otra forma de conectar PHP con MySQL.
Es la forma correcta, moderna y segura de hacerlo.
Sus ventajas:
- Protección contra inyección SQL
- Código más limpio
- Compatibilidad con múltiples motores
- Manejo profesional de errores
Si estás desarrollando aplicaciones web con PHP, aprender y usar PDO desde el inicio es una de las mejores decisiones que puedes tomar.
Post relacionados:
- Qué es PHP y por qué sigue dominando la web
- Cómo crear un CRUD completo con PHP y MySQL (PDO) + Bootstrap (caso real)