Métodos de Conexión a MySQL
PHP ofrece dos principales métodos para conectarse a bases de datos 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:
<?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:
<?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:
<?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 | Sí | Sí |
Orientación a objetos | Sí | Sí |
Interfaz procedural | Sí | No |
Portabilidad | Baja | Alta |
Manejo de errores | Funciones y propiedades | Excepciones |
Rendimiento | Ligeramente mejor con MySQL | Bueno con todas las BD |
Manejo de Errores en Conexiones
El manejo de errores es diferente en MySQLi y PDO:
Errores en MySQLi
MySQLi maneja errores principalmente a través de verificaciones condicionales:
<?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:
<?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.");
}
?>