Introducción a PDO
PDO (PHP Data Objects) es una extensión de PHP que proporciona una capa de abstracción para interactuar con bases de datos de forma segura y eficiente.
Ventajas de PDO
- Compatible con múltiples bases de datos.
- Usa consultas preparadas, evitando inyecciones SQL.
- Permite manejar excepciones con
try-catch.
Configuración de PDO y conexión a la base de datos
Para este ejemplo usaremos la siguiente base de datos
CREATE DATABASE ejemplo_pdo;
USE ejemplo_pdo;
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
email VARCHAR(50),
edad INT
);
Conectar con PDO
<?php
$host = "localhost";
$dbname = "ejemplo_pdo";
$user = "root";
$pass = "";
try {
$conexion = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Conexión exitosa";
} catch (PDOException $e) {
echo "Error en la conexión: " . $e->getMessage();
}
?>
Usando exec() (NO recomendado para datos de usuario)
<?php
$sql = "INSERT INTO usuarios (nombre, email, edad) VALUES ('Juan Pérez', 'juan@example.com', 30)";
$conexion->exec($sql);
echo "Usuario agregado";
?>
Usando consultas preparadas (RECOMENDADO)
<?php
$sql = "INSERT INTO usuarios (nombre, email, edad) VALUES (:nombre, :email, :edad)";
$stmt = $conexion->prepare($sql);
$stmt->execute([
":nombre" => "María López",
":email" => "maria@example.com",
":edad" => 25
]);
echo "Usuario agregado";
?>
Consultar datos con PDO
<?php
$sql = "SELECT * FROM usuarios WHERE email = :email";
$stmt = $conexion->prepare($sql);
$stmt->execute([":email" => "maria@example.com"]);
$usuario = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($usuario);
?>
Obtener un solo registro
<?php
$sql = "SELECT * FROM usuarios WHERE email = :email";
$stmt = $conexion->prepare($sql);
$stmt->execute([":email" => "maria@example.com"]);
$usuario = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($usuario);
?>
Obtener todos los registros
<?php
$sql = "SELECT * FROM usuarios";
$stmt = $conexion->query($sql);
$usuarios = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($usuarios as $usuario) {
echo "Nombre: " . $usuario["nombre"] . "<br>";
}
?>
Actualizar datos con PDO
<?php
$sql = "UPDATE usuarios SET edad = :edad WHERE email = :email";
$stmt = $conexion->prepare($sql);
$stmt->execute([
":edad" => 35,
":email" => "maria@example.com"
]);
echo "Usuario actualizado";
?>
Eliminar datos con PDO
<?php
$sql = "DELETE FROM usuarios WHERE email = :email";
$stmt = $conexion->prepare($sql);
$stmt->execute([":email" => "juan@example.com"]);
echo "Usuario eliminado";
?>
Crearemos ahora una clase para manejar la base de datos con PDO
<?php
class Database {
private $host = "localhost";
private $dbname = "ejemplo_pdo";
private $user = "root";
private $pass = "";
private $conexion;
public function __construct() {
try {
$this->conexion = new PDO("mysql:host={$this->host};dbname={$this->dbname};charset=utf8mb4", $this->user, $this->pass);
$this->conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Error en la conexión: " . $e->getMessage());
}
}
public function ejecutar($sql, $params = []) {
$stmt = $this->conexion->prepare($sql);
return $stmt->execute($params);
}
public function obtenerUno($sql, $params = []) {
$stmt = $this->conexion->prepare($sql);
$stmt->execute($params);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function obtenerTodos($sql, $params = []) {
$stmt = $this->conexion->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
?>
Y una clase Usuario para manejar los datos
<?php
require_once "Database.php";
class Usuario {
private $db;
public function __construct() {
$this->db = new Database();
}
public function agregarUsuario($nombre, $email, $edad) {
$sql = "INSERT INTO usuarios (nombre, email, edad) VALUES (:nombre, :email, :edad)";
return $this->db->ejecutar($sql, [":nombre" => $nombre, ":email" => $email, ":edad" => $edad]);
}
public function obtenerUsuario($email) {
$sql = "SELECT * FROM usuarios WHERE email = :email";
return $this->db->obtenerUno($sql, [":email" => $email]);
}
public function obtenerUsuarios() {
$sql = "SELECT * FROM usuarios";
return $this->db->obtenerTodos($sql);
}
}
?>
Probamos la clase Usuario.php
<?php
require_once "Usuario.php";
$usuario = new Usuario();
// Agregar usuario
$usuario->agregarUsuario("Carlos Gómez", "carlos@example.com", 40);
// Obtener un usuario
$resultado = $usuario->obtenerUsuario("carlos@example.com");
print_r($resultado);
// Obtener todos los usuarios
$todos = $usuario->obtenerUsuarios();
foreach ($todos as $user) {
echo "Nombre: " . $user["nombre"] . "<br>";
}
?>
A esto deberiamos de agregar manejo de sesiones y autentificación más adelante :).








Deja un comentario