Bases de Datos

Métodos de Conexión a MySQL

PHP ofrece dos principales métodos para conectarse a bases de datos MySQL:

La elección entre MySQLi y PDO dependerá de tus necesidades de proyecto. PDO ofrece mayor flexibilidad y compatibilidad con diferentes bases de datos, mientras que MySQLi está optimizado específicamente para MySQL.
MySQLi

Extensión MySQL mejorada, específica para MySQL. Ofrece tanto interfaz procedural como orientada a objetos.

  • Solo compatible con MySQL
  • Soporte para consultas preparadas
  • Disponible desde PHP 5.0
PDO

PHP Data Objects, una interfaz consistente para acceder a múltiples bases de datos.

  • Compatible con 12+ tipos de bases de datos
  • Manejo de errores con excepciones
  • Mayor portabilidad de código

Conexión con MySQLi

MySQLi ofrece dos estilos de programación: orientado a objetos y procedural. Aquí ejemplos de ambos:

MySQLi Orientado a Objetos

Este estilo utiliza objetos y métodos, siguiendo los principios de programación orientada a objetos:

mysqli_objeto.php

<?php
// Conexión
$mysqli = new mysqli("localhost", "usuario", "contraseña", "base_datos");

// Verificar conexión
if ($mysqli->connect_error) {
    die("Error de conexión: " . $mysqli->connect_error);
}

// Realizar consulta
$resultado = $mysqli->query("SELECT * FROM usuarios");

// Cerrar conexión
$mysqli->close();
?>
MySQLi Procedural

Este estilo utiliza funciones en lugar de métodos, siguiendo un paradigma más tradicional:

mysqli_procedural.php

<?php
// Conexión
$conexion = mysqli_connect("localhost", "usuario", "contraseña", "base_datos");

// Verificar conexión
if (!$conexion) {
    die("Error de conexión: " . mysqli_connect_error());
}

// Realizar consulta
$resultado = mysqli_query($conexion, "SELECT * FROM usuarios");

// Cerrar conexión
mysqli_close($conexion);
?>

Conexión con PDO

PDO (PHP Data Objects) es una capa de abstracción para acceder a bases de datos que proporciona una interfaz consistente independientemente del tipo de base de datos que estés utilizando.

¿Por qué usar PDO?

PDO ofrece múltiples ventajas que lo convierten en la opción preferida para muchos desarrolladores:

  • Portabilidad: Tu código funcionará con cualquiera de las 12+ bases de datos soportadas, simplemente cambiando la cadena de conexión.
  • Seguridad: Consultas preparadas con parámetros vinculados que protegen contra inyecciones SQL.
  • Orientado a objetos: API consistente y moderna que facilita el desarrollo.
  • Manejo de errores avanzado: Utiliza excepciones que permiten implementar una gestión de errores más robusta.
  • Reutilización de conexiones: Permite reutilizar conexiones existentes para mejorar el rendimiento.
  • Transacciones: Soporte nativo para transacciones, permitiendo operaciones atómicas.
Conexión PDO

PDO utiliza un enfoque orientado a objetos y manejo de excepciones para una mayor robustez:

pdo_conexion.php

<?php
try {
    // Conexión
    $pdo = new PDO(
        "mysql:host=localhost;dbname=base_datos",
        "usuario",
        "contraseña",
        array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
    );

    // Realizar consulta
    $stmt = $pdo->query("SELECT * FROM usuarios");
    $usuarios = $stmt->fetchAll();

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

PDO utiliza excepciones para el manejo de errores, lo que facilita la captura y gestión de problemas en aplicaciones profesionales.

Consejo profesional: En proyectos modernos de PHP, PDO es la opción recomendada por su flexibilidad, seguridad y compatibilidad con los frameworks más populares como Laravel, Symfony y CodeIgniter.

MySQLi vs PDO: Comparación Detallada

A continuación se presenta una comparación de las características más importantes de ambas interfaces:

Característica MySQLi PDO
Bases de datos soportadas Solo MySQL 12+ diferentes bases de datos
Consultas preparadas
Orientación a objetos
Interfaz procedural No
Portabilidad Baja Alta
Manejo de errores Funciones y propiedades Excepciones
Rendimiento Ligeramente mejor con MySQL Bueno con todas las BD
Recomendación: PDO es generalmente la mejor opción para proyectos nuevos por su flexibilidad y portabilidad. Usa MySQLi si tu proyecto es exclusivamente para MySQL o necesitas su interfaz procedural.

Manejo de Errores en Conexiones

Un manejo adecuado de errores en conexiones a bases de datos es crucial para la seguridad y experiencia de usuario en aplicaciones de producción.

El manejo de errores es diferente en MySQLi y PDO:

Errores en MySQLi

MySQLi maneja errores principalmente a través de verificaciones condicionales:

mysqli_errores.php

<?php
// Verificar error de conexión (orientado a objetos)
if ($mysqli->connect_error) {
    die("Error de conexión: " . $mysqli->connect_error);
}

// Verificar error de consulta
if (!$result = $mysqli->query($sql)) {
    die("Error en la consulta: " . $mysqli->error);
}
?>
Errores en PDO

PDO utiliza excepciones para el manejo de errores, lo que permite una gestión más estructurada:

pdo_errores.php

<?php
try {
    $pdo = new PDO(
        "mysql:host=localhost;dbname=base_datos",
        "usuario",
        "contraseña",
        array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        )
    );

    // Código de la base de datos...

} catch(PDOException $e) {
    // Log del error
    error_log("Error de BD: " . $e->getMessage());

    // Mensaje para el usuario
    die("Lo sentimos, ha ocurrido un error en la base de datos.");
}
?>
Buena práctica: En entornos de producción, nunca muestres los mensajes de error detallados a los usuarios finales. Registra los errores en un archivo de log y muestra solo mensajes genéricos.