Conexión segura con PDO en PHP: archivo con.php explicado paso a paso 🔌


Después de crear la base de datos y la tabla empleados, el siguiente paso para nuestro CRUD es conectar PHP con MySQL de forma segura y estable.

En este caso de estudio vamos a usar PDO (PHP Data Objects), que es la forma moderna y recomendada para trabajar con bases de datos en PHP.



¿Por qué usar PDO y no mysqli?


PDO tiene varias ventajas importantes:

  • Soporta múltiples motores de base de datos.
  • Permite consultas preparadas (más seguridad).
  • Manejo de errores más limpio.
  • Código más ordenado y reutilizable.

Para un CRUD moderno, PDO es la opción correcta.



Archivo de conexión: includes/con.php


Este es el archivo que se encarga de crear la conexión con MySQL.

Luego se incluye en el CRUD principal con:

require __DIR__ . '/includes/con.php';

Código completo de conexión con PDO


Este es el archivo base:

<?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());
  }
?>

Explicación línea por línea


Datos de conexión

$host = 'localhost';
$db   = 'floopware_casos';
$user = 'usuario';
$pass = 'password';
$charset = 'utf8mb4';

Aquí se definen los datos de acceso:

  • host: normalmente localhost.
  • db: nombre de la base de datos.
  • user: usuario de MySQL.
  • pass: contraseña.
  • charset: utf8mb4 para soportar todo tipo de caracteres.

Opciones de PDO


$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

Estas opciones son muy importantes.

ERRMODE_EXCEPTION

Hace que los errores de base de datos se lancen como excepciones.

Esto permite:

  • Detectar errores fácilmente.
  • Evitar fallos silenciosos.

FETCH_ASSOC

Hace que los resultados se devuelvan como arreglos asociativos:

Ejemplo:

$empleado['nombres']

En lugar de:

$empleado[1]

Mucho más claro y legible.



Creación de la conexión


$pdo = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass, $options);

Aquí se crea el objeto $pdo, que será usado en todo el CRUD para:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

Manejo de errores


catch (\PDOException $e) {
    die("Error de conexión: " . $e->getMessage());
}

Si ocurre un error:

  • Se detiene el script.
  • Se muestra el mensaje de error.

En producción, lo ideal es ocultar el mensaje real y mostrar uno genérico.



Cómo se usa esta conexión en el CRUD


Una vez creado con.php, en el archivo principal solo necesitas:

require __DIR__ . '/includes/con.php';

Después de eso, puedes usar $pdo en cualquier consulta:

$stmt = $pdo->query("SELECT * FROM empleados");
$empleados = $stmt->fetchAll();

Consejo importante de seguridad


Nunca hagas esto:

$pdo->query("SELECT * FROM empleados WHERE codigo = '$codigo'");

Eso abre la puerta a inyección SQL.

En su lugar, usa consultas preparadas:

$stmt = $pdo->prepare("SELECT * FROM empleados WHERE codigo = ?");
$stmt->execute([$codigo]);

Tu CRUD ya sigue esta buena práctica.



Estructura mínima del proyecto (recomendado)


Para mantener el código ordenado:

casos-de-estudio/
│
├── crud-caso-de-estudio.php
└── includes/
    ├── con.php
    └── header.php

Esto permite:

  • Reutilizar la conexión.
  • Mantener el código limpio.
  • Evitar duplicación.


Conclusión:


La conexión con PDO es el corazón de tu CRUD.

Con este archivo:

  • Centralizas la conexión.
  • Manejas errores correctamente.
  • Preparas el proyecto para consultas seguras.

En el siguiente paso, comenzaremos con la primera operación real del CRUD:

➡️ Crear empleados (INSERT) con validación y control de duplicados



Post relacionados:




Cluster relacionados: