En este tema, aprenderemos a utilizar PDO (PHP Data Objects) para interactuar con bases de datos en PHP. PDO es una extensión que define una interfaz ligera y consistente para acceder a bases de datos en PHP. A diferencia de las funciones específicas de MySQL, PDO permite trabajar con múltiples bases de datos utilizando la misma API.

¿Qué es PDO?

PDO es una extensión de PHP que proporciona una interfaz para acceder a bases de datos. Algunas de sus características clave son:

  • Abstracción de la base de datos: PDO permite cambiar de base de datos sin cambiar el código PHP.
  • Seguridad: PDO soporta consultas preparadas, lo que ayuda a prevenir inyecciones SQL.
  • Flexibilidad: PDO soporta múltiples bases de datos, incluyendo MySQL, PostgreSQL, SQLite, y más.

Configuración de PDO

Antes de comenzar a usar PDO, asegúrate de que la extensión PDO esté habilitada en tu instalación de PHP. Puedes verificar esto creando un archivo phpinfo.php con el siguiente contenido:

<?php
phpinfo();
?>

Busca la sección de PDO en la salida para confirmar que está habilitada.

Conectando a una Base de Datos con PDO

Para conectarse a una base de datos MySQL usando PDO, necesitas los siguientes datos:

  • Host (servidor de la base de datos)
  • Nombre de la base de datos
  • Usuario de la base de datos
  • Contraseña del usuario

Aquí tienes un ejemplo de cómo conectarse a una base de datos MySQL usando PDO:

<?php
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '';

try {
    $pdo = new PDO($dsn, $username, $password);
    // Establecer el modo de error de PDO a excepción
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Conexión exitosa";
} catch (PDOException $e) {
    echo "Error de conexión: " . $e->getMessage();
}
?>

Explicación del Código

  • $dsn: Data Source Name, contiene la información necesaria para conectarse a la base de datos.
  • $username y $password: Credenciales de acceso a la base de datos.
  • new PDO($dsn, $username, $password): Crea una nueva instancia de PDO.
  • setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION): Configura PDO para que lance excepciones en caso de error.

Consultas Preparadas

Las consultas preparadas son una característica importante de PDO que ayuda a prevenir inyecciones SQL. Aquí tienes un ejemplo de cómo usar consultas preparadas:

Insertar Datos

<?php
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);

$name = 'John Doe';
$email = '[email protected]';

$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);

$stmt->execute();
echo "Datos insertados correctamente";
?>

Explicación del Código

  • $sql: La consulta SQL con marcadores de posición.
  • $stmt = $pdo->prepare($sql): Prepara la consulta.
  • bindParam: Vincula los parámetros a los marcadores de posición.
  • execute: Ejecuta la consulta.

Seleccionar Datos

<?php
$sql = "SELECT * FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);

$email = '[email protected]';
$stmt->bindParam(':email', $email);

$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($result as $row) {
    echo $row['name'] . " - " . $row['email'] . "<br>";
}
?>

Explicación del Código

  • fetchAll(PDO::FETCH_ASSOC): Recupera todos los resultados como un array asociativo.

Ejercicio Práctico

Ejercicio 1: Conectar a una Base de Datos y Realizar una Consulta

  1. Objetivo: Conectar a una base de datos MySQL y seleccionar todos los registros de una tabla llamada products.
  2. Instrucciones:
    • Crea una base de datos llamada shop.
    • Crea una tabla llamada products con las columnas id, name, y price.
    • Inserta algunos registros en la tabla products.
    • Escribe un script PHP que se conecte a la base de datos y seleccione todos los registros de la tabla products.

Solución

<?php
$dsn = 'mysql:host=localhost;dbname=shop';
$username = 'root';
$password = '';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM products";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $products = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($products as $product) {
        echo $product['name'] . " - $" . $product['price'] . "<br>";
    }
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
?>

Retroalimentación

  • Error Común: No establecer el modo de error de PDO a excepción. Esto puede dificultar la depuración de errores.
  • Consejo: Siempre usa consultas preparadas para prevenir inyecciones SQL.

Conclusión

En esta sección, hemos aprendido a usar PDO para interactuar con bases de datos en PHP. Hemos cubierto cómo conectarse a una base de datos, realizar consultas preparadas, y manejar los resultados. PDO es una herramienta poderosa y flexible que mejora la seguridad y la portabilidad de tus aplicaciones PHP. En el próximo módulo, profundizaremos en la seguridad en bases de datos para proteger aún más tus aplicaciones.

Curso de Programación en PHP

Módulo 1: Introducción a PHP

Módulo 2: Estructuras de Control

Módulo 3: Funciones

Módulo 4: Arrays

Módulo 5: Trabajando con Formularios

Módulo 6: Trabajando con Archivos

Módulo 7: Programación Orientada a Objetos (POO)

Módulo 8: Trabajando con Bases de Datos

Módulo 9: Técnicas Avanzadas de PHP

Módulo 10: Frameworks de PHP y Mejores Prácticas

Módulo 11: Proyecto: Construyendo una Aplicación Web

© Copyright 2024. Todos los derechos reservados