mysqli o PDO: ¿cuáles son los pros y los contras? [cerrado]
En nuestro lugar, estamos divididos entre el uso de mysqli y PDO para cosas como declaraciones preparadas y soporte de transacciones. Algunos proyectos utilizan uno, otros el otro. Hay pocas posibilidades realistas de que alguna vez pasemos a otro RDBMS.
Prefiero PDO por la única razón de que permite parámetros con nombre para declaraciones preparadas, y hasta donde yo sé, mysqli no lo hace.
¿Existen otras ventajas y desventajas de elegir uno sobre el otro como estándar a medida que consolidamos nuestros proyectos para utilizar un solo enfoque?
Bueno, se podría discutir con el aspecto orientado a objetos, las declaraciones preparadas, el hecho de que se convierta en un estándar, etc. Pero sé que la mayoría de las veces, convencer a alguien funciona mejor con una característica excelente. Entonces ahí está:
Una cosa realmente buena con PDO es que puedes recuperar los datos, inyectándolos automáticamente en un objeto. Si no quieres usar un ORM (porque es solo un script rápido) pero te gusta el mapeo de objetos, es REALMENTE genial:
class Student {
public $id;
public $first_name;
public $last_name
public function getFullName() {
return $this->first_name.' '.$this->last_name
}
}
try
{
$dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password)
$stmt = $dbh->query("SELECT * FROM students");
/* MAGIC HAPPENS HERE */
$stmt->setFetchMode(PDO::FETCH_INTO, new Student);
foreach($stmt as $student)
{
echo $student->getFullName().'<br />';
}
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
Mover una aplicación de una base de datos a otra no es muy común, pero tarde o temprano puede encontrarse trabajando en otro proyecto utilizando un RDBMS diferente. Si estás en casa con PDO, entonces habrá al menos una cosa menos que aprender en ese momento.
Aparte de eso, encuentro que la API PDO es un poco más intuitiva y se siente más verdaderamente orientada a objetos. mysqli se siente como si fuera solo una API de procedimiento que ha sido objetivada, si sabes a qué me refiero. En resumen, me resulta más fácil trabajar con PDO, pero eso, por supuesto, es subjetivo.
Empecé a usar PDO porque, en mi opinión, el soporte de declaraciones es mejor. Estoy usando una capa de acceso a datos similar a ActiveRecord y es mucho más fácil implementar declaraciones generadas dinámicamente. La vinculación de parámetros de MySQLi debe realizarse en una única llamada de función/método, por lo que si no sabe hasta el tiempo de ejecución cuántos parámetros desea vincular, se ve obligado a usar call_user_func_array()
(creo que ese es el nombre de función correcto) para selecciones . Y olvídese del simple enlace de resultados dinámicos.
Sobre todo, me gusta PDO porque tiene un nivel de abstracción muy razonable. Es fácil de utilizar en sistemas completamente abstractos en los que no se desea escribir SQL, pero también facilita el uso de un tipo de sistema de consulta pura y más optimizado, o la combinación de ambos.
PDO es el estándar, es lo que la mayoría de los desarrolladores esperan usar. mysqli era esencialmente una solución personalizada para un problema particular, pero tiene todos los problemas de las otras bibliotecas específicas de DBMS. PDO es donde irá todo el trabajo duro y el pensamiento inteligente.