TABLA
CON LAS COMPARATIVAS ENTRE LAS DOS LIBRERÍAS
Características
|
mysqli
|
PDO
Driver
|
mysql
|
PHP
versión en la que se introdujo
|
5.0
|
5.0
|
antes
de la 3.0
|
compatible
con PHP 5.x
|
Si
|
Si
|
Si
|
compatible
con PHP 6.0
|
Si
|
Si
|
Si
|
MySQL
Soporte
|
Mantenimiento
y desarrollo activo
|
desarrollo
activo solo hasta la versión PHP 5.3
|
Solo
mantenimiento
|
MySQL
Recomendado para nuevos proyectos.
|
Si
|
Si
|
No
|
API
supports Charsets
|
Si
|
Si
|
No
|
API
sentencias preparadas, por parte del server
|
Si
|
Si
|
No
|
API
sentencias preparadas, por parte del cliente
|
No
|
Si
|
No
|
API
Soporte procedimientos almacenados
|
Si
|
Si
|
No
|
API
Múltiples Query’s
|
Si
|
Si+
|
No
|
Soporta
todas las versiones superiores a MySQL 4.1+
|
Si
|
Si+
|
No
|
La
extensión mysqli y conexiones persistentes
EL soporte para conexiones
persistentes fue introducido en PHP 5.3 para el extensión mysqli.
El soporte ya estaba presente en PDO MYSQL y ext/mysql. La idea detrás de las
conexiones persistentes es que una conexión entre un proceso cliente y una base
de datos puede ser reutilizados por un proceso cliente, en lugar de ser creado
y destruido varias veces. Esto reduce la sobrecarga de la creación de
conexiones nuevas cada vez que es requerido, como las conexiones no utilizadas
se almacenan en caché y están lista para ser reutilizadas.
A diferencia de la extensión
mysql, mysqli no proporciona una función separada para la apertura de
conexiones persistentes. Para abrir una conexión persistente debe de
colocar p: al nombre del host cuando se conecta.
El problema con las conexiones
persistentes es que se pueden dejar en estados impredecibles por los clientes.
Por ejemplo, un bloqueo de tabla puede ser activado antes de que un cliente
termina de forma inesperada. Un nuevo proceso cliente reusando esta conexión
persistente tendrá la conexión "tal cual". Toda la limpieza tendría
que ser realizada por el nuevo proceso cliente antes de que pudiera hacer buen
uso de la conexión persistente, aumentando la carga sobre el programador.
La conexión persistente de la
extensión mysqli no obstante incorpora manejo para limpieza de
código. La limpieza llevada a cabo por mysqli incluye:
- Rollback
de transacciones activas
- Cierre
y borrado de tablas temporales
- Desbloque
de tablas
- Reestablece
variables de sesión
- Cerrar
consultas preparadas (siempre pasa con PHP)
- Cerra
controlador
- Quitar
bloqueos adquiridos con GET_LOCK()
Esto asegura que las
conexiones persistentes se encuentran en un estado limpio para el retorno del
conjunto de conexiones, antes de que el proceso cliente los use.
La extensión mysqli hace
la limpieza automáticamente llamando a la función mysql_change_user() de
C-API.
La característica de limpieza
automática tiene sus ventajas y desventajas aunque. La ventaja es que el
programador no necesita preocuparse por estar añadiendo el código de limpieza,
ya que es llamdo automáticamente. Asi mismo, la desventaja es que el código
podría volverse potencialmente un poco más lento, pues el
código para realizar la limpieza necesita ejecutarse cada vez que una conexión
es devuelta por el conjunto de conexiones.
Es posible desactivar el
código de limpieza automática, mediante la compilación de PHP si se defineMYSQLI_NO_CHANGE_USER_ON_PCONNECT.
MySQL Vs. MySQLi de PHP
El lanzamiento de la versión 5 de PHP incluyó una nueva extensión para
acceder a bases de datos de MySQL llamada MySQL Improved, o MySQLi. Esta
ofrece una mejora en el desempeño, una estructura orientada
a objetos, soporte para instrucciones preparadas y funcionalidad adicional en
forma de transacciones de bases de datos. La extensión de MySQL actual no será
mejorada, por ejemplo, para proporcionar soporte unicode, y eventualmente será
eliminada comenzando con la versión 6 de PHP.
ESTRUCTURA ORIENTADA A OBJETOS
MySQLi proporciona un
conjunto de funciones para una estructura de código con estilo de
procedimientos para hacer la transición de MySQL más fácil. Sin embargo también
proporciona funcionalidad a través de un conjunto de clases orientadas a
objetos. El uso del estilo orientado a objetos puede lograr que la integración
de MySQL se ajuste mejor con las características orientadas a objetos de la
versión 5 de PHP y a menudo elimina la necesidad de crear variables adicionales
para respaldar las operaciones y tareas de MySQL. Por ejemplo, lo siguiente
muestra el código para conectarse a un servidor de bases de datos y abrir una
base de datos en MySQL y en MySQLi: MySQL: $dbc =
mysql_connect("localhost", "user", "password");
$db = mysql_select_database("database");
MySQLi: $db = new mysqli("localhost", "user",
"password", "database");
INSTRUCCIONES PREPARADAS
Quizá la mayor diferencia
entre MySQL y MySQLi es el soporte de este último para instrucciones
preparadas. Con MySQL debes de tener especial precaución para usar la instrucción
escape en cada cadena usada en una consulta para prevenir ataques de inyección
en SQL. Con MySQLi y las instrucciones preparadas puedes enlazar conjuntos de
parámetros a una consulta e igualar estos últimos con los diferentes valores
que quieras usar en la consulta. MySQLi se encarga de asegurarse de que se use
apropiadamente la instrucción escape en todo el código antes de ser aplicado en
la base de datos. Por ejemplo, el siguiente código inserta dos registros en una
tabla de MySQL usando MySQLi:
$stmt = $db->prepare("INSERT INTO PEOPLE (FullName, Email)
values (?, ?); $stmt->bind_param("ss", $fullname, $email);
$fullname = "John Johnson"; $email =
"john@johnjohnson.com"; $stmt->execute(); $fullname = "Mary
Johnson"; $email = "mary@johnjohnson.com"; $stmt->execute();
$stmt->close();
MEJORAS EN LA EFICIENCIA
Debido a las instrucciones
preparadas y a otras mejoras en la eficiencia, la extensión MySQli debe
desempeñarse más rápido que las instrucciones de MySQL equivalentes. Como
puedes ver en el ejemplo anterior usando instrucciones preparadas, la
sobrecarga de una inserción solamente es requerida una vez, cuando se prepara
la instrucción. Con una instrucción insert equivalente en MySQL, la sobrecarga
del insert tendría que repetirse con cada consulta a la base de datos.
TRANSACCIONES
“MySQLi proporciona funcionalidad adicional en forma de
transacciones. Con la extensión MySQLi puedes agrupar un conjunto de
operaciones de datos en una transacción y ejecutar las operaciones en conjunto
como una sola transacción. Si una operación de la transacción falla, la
operación completa falla y todos los cambios que se hayan efectuado se
revierten. Por ejemplo, quizá uses una transacción al programar una
transferencia de dinero entre dos cuentas ya que, a menos que ambos lados de la
operación tengan éxito, la operación no es exitosa, y no quieres dejar un
estado en el que una cuenta haya sido debitada pero la otra no haya sido
acreditada.”
(mcdonnell,
2015)
Bibliografía
mcdonnell, s.
(2015). ehowen. Obtenido de
http://www.ehowenespanol.com/mysql-vs-mysqli-php-info_281915/
soyprogramador. (2015). Obtenido de
soyprogramador:
http://soyprogramador.liz.mx/cual-usar-mysqli-mysql-como-conexin/
No hay comentarios.:
Publicar un comentario