martes, 23 de agosto de 2016

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
 (soyprogramador, 2015)
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/