Tecnología

Inicio

Vs. PHP MySQL MySQLi

El lanzamiento de PHP versión 5 incluye una nueva extensión para el acceso a bases de datos MySQL llama mejorada de MySQL, o MySQLi. MySQLi ofrece un rendimiento mejorado, una estructura orientada a objetos, soporte para comandos preparados y funcionalidad adicional en forma de transacciones de bases de datos. La extensión actual de MySQL no se verá reforzada, por ejemplo para proporcionar soporte Unicode, y con el tiempo se eliminará comenzando con PHP versión 6.

Estructura orientada a objetos

MySQLi proporciona un conjunto de funciones para una estructura de código de estilo de procedimiento 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 de un estilo orientado a objetos puede hacer que la integración de MySQL encaja mejor con la versión de PHP 5 características orientadas a objetos y con frecuencia elimina la necesidad de crear variables adicionales para apoyar las operaciones y tareas de MySQL. Por ejemplo, a continuación se muestra el código para conectarse a un servidor de base de datos y abra una base de datos, tanto en MySQL y MySQLi:
MySQL:
$ DBC = mysql_connect ( "localhost", "usuario", "contraseña");
$ Db = mysql_select_database ( "base de datos");

MySQLi:
$ Db = new mysqli ( "localhost", "usuario", "contraseña", "base de datos");

Sentencias preparadas

Tal vez la mayor diferencia entre MySQL y MySQLi es el apoyo del MySQLi para comandos preparados. Con MySQL, hay que tener especial cuidado para escapar de cada cadena que se utiliza en una consulta para prevenir ataques de inyección SQL. Con MySQLi y declaraciones preparadas, se enlaza un conjunto de parámetros a una consulta y establecer los parámetros iguales a los diferentes valores que desea utilizar en la consulta. MySQLi se encarga de asegurarse de que todo el código se escapó correctamente antes de que se aplica a la base de datos. Por ejemplo, el código siguiente inserta dos Recrods en una tabla de MySQL usando MySQLi:

$ Stmt = $ db-> prepare ( "INSERT INTO PERSONAS (valores NombreCompleto, correo electrónico) (,)??;
$ Stmt-> bind_param ( "ss", nombre completo $, $ correo electrónico);
$ Nombre_completo = "John Johnson";
$ Email = "[email protected]";
$ Stmt-> execute ();
$ Nombre_completo = "Mary Johnson";
$ Email = "[email protected]";
$ Stmt-> execute ();
$ Stmt-> close ();

Mejoras en la eficiencia

Debido a las declaraciones preparadas y otras mejoras en la eficiencia, la extensión mysqli debe realizar más rápido que MySQL declaraciones equivalentes. Como se puede ver en el ejemplo anterior utilizando comandos preparados, la sobrecarga de una inserción sólo se requiere una vez, cuando se prepara el comunicado. Con un inserto MySQL equivalente, la sobrecarga de la pieza de inserción se repite con cada consulta de inserción a la base de datos.

Actas

MySQLi proporciona funcionalidad adicional en forma de transacciones. Con la extensión mysqli, puede agrupar un conjunto de operaciones de datos juntos en una transacción y ejecutar las operaciones en conjunto como una sola transacción. Si una operación en la transacción falla, toda la operación falla y todos los cambios que se han hecho se revierten. Por ejemplo, es posible utilizar una transacción cuando se programa una transferencia de dinero entre dos cuentas, porque a menos que ambos lados de la operación de éxito, la operación no es un éxito, y no querer salir de un estado en que una cuenta ha sido debitado pero la otra cuenta no ha sido acreditado.