¿Cuál es la diferencia entre MySQL, MySQLi y PDO? [cerrado]

Respuestas:

100

Hay (más de) tres formas populares de usar MySQL desde PHP. Esto describe algunas características / diferencias PHP: Elegir una API :

  1. ( DESAPROBADO ) Las funciones mysql son de procedimiento y utilizan el escape manual.
  2. MySQLi es un reemplazo para las funciones mysql, con versiones orientadas a objetos y de procedimiento. Tiene soporte para declaraciones preparadas.
  3. PDO (PHP Data Objects) es una capa de abstracción de base de datos general con soporte para MySQL entre muchas otras bases de datos. Proporciona declaraciones preparadas y una flexibilidad significativa en la forma en que se devuelven los datos.

Recomendaría usar PDO con declaraciones preparadas. Es una API bien diseñada y le permitirá moverse más fácilmente a otra base de datos (incluida cualquiera que admita ODBC ) si es necesario.

Matthew Flaschen
fuente
9
A menudo existe la confusión de que para el procedimiento debe usar las funciones mysql _ * () donde para OO usa mysqli! El hecho es que mysqli reemplaza completamente la implementación temprana (PHP 4) de mysql. Es posible usar tanto el estilo de procedimiento como el OO con mysqli.
Patrick Allaert
@Patrick, gracias. He corregido esto.
Matthew Flaschen
46

Esas son diferentes API para acceder a un servidor MySQL

  • El MySQL es la API histórica
  • El mysqli es una nueva versión de la API histórico. Debería funcionar mejor y tener un mejor conjunto de funciones. Además, la API está orientada a objetos.
  • PDO_MySQL , es el MySQL para PDO. PDO se ha introducido en PHP, y el proyecto tiene como objetivo hacer una API común para el acceso a todas las bases de datos, por lo que, en teoría, debería poder migrar entre RDMS sin cambiar ningún código (si no utiliza la función RDBM específica en sus consultas) ), también orientado a objetos.

Por lo tanto, depende del tipo de código que desee producir. Si prefiere capas orientadas a objetos o funciones simples ...

Mi consejo seria

  1. DOP
  2. MySQLi
  3. mysql

También creo que la API mysql probablemente se eliminará en futuras versiones de PHP.

RageZ
fuente
3
Ya no es una sensación: PHP7 eliminó la API mysql, dejando PDO y mysqli
Manuel
3

mysqli es la versión mejorada de mysql.

La extensión PDO define una interfaz ligera y consistente para acceder a bases de datos en PHP. Cada controlador de base de datos que implementa la interfaz PDO puede exponer características específicas de la base de datos como funciones de extensión regulares.

Sarfraz
fuente
44
copiar del archivo manual no es muy útil.
XuDing
3

Específicamente, la extensión MySQLi proporciona los siguientes beneficios extremadamente útiles sobre la antigua extensión MySQL.

Interfaz OOP (además del procedimiento) Estado de cuenta preparado Transacción de soporte + Procedimiento almacenado Soporte Sintaxis de Nicer Mejoras de velocidad Depuración mejorada

Extensión PDO

La extensión PHP Data Objects es una capa de abstracción de la base de datos. Específicamente, esta no es una interfaz MySQL, ya que proporciona controladores para muchos motores de bases de datos (por supuesto, incluyendo MYSQL).

PDO tiene como objetivo proporcionar una API consistente que significa que cuando se cambia un motor de base de datos, el código cambia para reflejar que esto debería ser mínimo. Cuando use PDO, su código normalmente "simplemente funcionará" en muchos motores de base de datos, simplemente cambiando el controlador que está usando.

Además de ser compatible con bases de datos cruzadas, PDO también admite declaraciones preparadas, procedimientos almacenados y más, mientras usa el controlador MySQL.


fuente