Conexión PDO a Mysqli [SOLUCIONADO]

Estableciendo una conexión segura con PDO y MySQLi

Al trabajar con PHP, es de suma importancia realizar una conexión segura con la base de datos. Las dos extensiones más utilizadas son PDO (PHP Data Objects) y MySQLi (MySQL Improved). Ambas ofrecen herramientas para la interacción eficiente con bases de datos MySQL. A continuación, detallaremos las modalidades de uso de cada extensión y cómo pueden ayudarte a optimizar tus aplicaciones.

Introducción a PDO

La extensión de PHP Data Objects (PDO) proporciona una capa de abstracción de acceso a datos, lo cual significa que, independientemente de la base de datos que estés utilizando, puedes utilizar las mismas funciones para realizar las consultas y obtener datos. PDO ofrece una conexión segura para evitar problemas como la inyección de SQL.

Para comenzar con una instancia de PDO, debes definir los siguientes datos:

  • DNS (nombre de origen de datos)
  • Usuario de la base de datos
  • Contraseña de la base de datos

El siguiente bloque de código ilustra una conexión básica usando PDO:

<?php
$host = '127.0.0.1';
$db   = 'nombre_de_tu_base_datos';
$user = 'usuario_bd';
$pass = 'contraseña_bd';
$charset = 'utf8mb4';

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

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
     throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>
        

Manejando excepciones es crítico al trabajar con PDO para poder reaccionar adecuadamente ante cualquier problema de conexión. El manejo de errores usando PDO es sencillo y efectivo gracias al uso de bloques try-catch, asegurando también que tu código sea más robusto ante posibles fallos.

Conexión a través de MySQLi

Por otro lado, tenemos la extensión MySQL Improved (MySQLi), que está diseñada para trabajar exclusivamente con bases de datos MySQL. MySQLi es ideal para aquellos que necesitan funcionalidades específicas de MySQL que PDO no provee.

Para realizar una conexión utilizando MySQLi, es necesario:

  • Nombre del servidor o host
  • Nombre de usuario de la base de datos
  • Contraseña
  • Nombre de la base de datos

A continuación, mostramos un fragmento en PHP para conectarse a una base de datos usando MySQLi:

<?php
$host = '127.0.0.1';
$user = 'usuario_bd';
$pass = 'contraseña_bd';
$db = 'nombre_de_tu_base_datos';

$mysqli = new mysqli($host, $user, $pass, $db);

if ($mysqli->connect_error) {
    die('Error de conexión: ' . $mysqli->connect_error);
}
?>
        

Es crucial manejar adecuadamente cualquier error que pueda surgir durante la conexión. El manejo de errores con MySQLi se realiza a través de la propiedad connect_error, que nos permite identificar rapidamente cualquier problema.

Preparación de consultas e inserción de datos

Tanto PDO como MySQLi permiten preparar consultas, una técnica que mejora la performance y previene la inyección SQL. Las consultas preparadas separan la lógica de construcción de la consulta de los datos efectivamente a enviar a la BD, haciendo que todo el proceso sea más seguro.

Para PDO, el procedimiento es el siguiente:

<?php
$consulta = $pdo->prepare('INSERT INTO usuarios (nombre, email) VALUES (:nombre, :email)');
$consulta->execute([
    'nombre' => $nombre,
    'email' => $email,
]);
?>
        

Por su parte, con MySQLi:

<?php
$consulta = $mysqli->prepare('INSERT INTO usuarios (nombre, email) VALUES (?, ?)');
$consulta->bind_param('ss', $nombre, $email); // 'ss' significa que ambos parámetros son strings.
$consulta->execute();
?>
        

El uso de consultas preparadas es una práctica recomendada para proteger las aplicaciones web contra atacantes que podrían intentar realizar inyecciones SQL. Tanto PDO como MySQLi ofrecen mecanismos sencillos y eficientes para implementarlo.

Recuperación de datos y uso de fetch

No menor importancia tiene la forma en que recuperamos los datos de nuestra base. PDO, por ejemplo, nos ofrece diferentes métodos de fetch que nos permiten obtener los datos de maneras que se adecuen a nuestras necesidades. Uno de los más comunes es PDO::FETCH_ASSOC, que nos devuelve un array asociativo.

Veamos un ejemplo de recuperación de datos con PDO:

<?php
$consulta = $pdo->query('SELECT nombre, email FROM usuarios');
while ($fila = $consulta->fetch(PDO::FETCH_ASSOC)) {
    echo $fila['nombre'] . ' - ' . $fila['email'] . "n";
}
?>
        

Con MySQLi, un enfoque similar:

<?php
$consulta = $mysqli->query('SELECT nombre, email FROM usuarios');
while ($fila = $consulta->fetch_assoc()) {
    echo $fila['nombre'] . ' - ' . $ilihan['email'] . "n";
}
?>
        

Ya sea trabajando con PDO o MySQLi, el modo de recuperar datos de la base de datos es sencillo, y el desarrollador puede elegir el que mejor se adapte a su contexto.

Transacciones: garantizando la integridad

Para mantener la integridad de los datos en operaciones que involucran múltiples pasos, es fundamental usar transacciones. Tanto PDO como MySQLi soportan esta característica, que permite agrupar varias operaciones como una unidad que se ejecuta de forma completa, o no se efectúa en caso de error.

Ejemplo de uso de transacciones con PDO:

<?php
try {
    $pdo->beginTransaction();
    $pdo->exec('INSERT INTO usuarios (nombre, email) VALUES ("Nombre1", "[email protected]")');
    $pdo->exec('INSERT INTO usuarios (nombre, email) VALUES ("Nombre2", "[email protected]")');
    // ... más operaciones
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    echo "Ocurrió un error: " . $e->getMessage();
}
?>
        

Transacciones en MySQLi:

<?php
try {
    $mysqli->begin_transaction();
    $mysqli->query('INSERT INTO usuarios (nombre, email) VALUES ("Nombre1", "[email protected]")');
    $mysqli->query('INSERT INTO usuarios (nombre, email) VALUES ("Nombre2", "[email protected]")');
    // ... más operaciones
    $mysqli->commit();
} catch (mysqli_sql_exception $exception) {
    $mysqli->rollback();
    throw $exception;
}
?>
        

Realizar transacciones correctamente en PHP asegura que se mantenga la consistencia de los datos en todo momento, evitando posibles estados inválidos que podrían ser introducidos por operaciones parciales fallidas.

Consideraciones finales para efectuar la conexión

Tanto PDO como MySQLi son herramientas poderosas y seguras para conectar con bases de datos MySQL desde PHP. La elección entre una u otra dependerá de las necesidades específicas del proyecto; sin embargo, PDO brinda una mayor flexibilidad si se necesita compatibilidad con diferentes tipos de bases de datos.

La conexión efectiva a la base de datos utilizando cualquiera de estas dos extensiones garantiza una interacción con la base de datos más segura, eficiente y optimizada. Es una habilidad esencial para cualquier desarrollador PHP profesional y un conocimiento fundamental en cualquier proceso de desarrollo de aplicaciones web sólidas y confiables.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad