MySQL Vs. MySQLi de PHP

Por steve mcdonnell
MySQL Vs. MySQLi de PHP
Jupiterimages/Photos.com/Getty Images

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.