El lanzamiento de PHP versión 5 incluye una nueva extensión para el acceso a bases de datos MySQL llamado MySQL mejorada o MySQLi . MySQLi ofrece un mejor rendimiento , una estructura orientada a objetos, soporte para comandos preparados y funcionalidad adicional en la forma de transacciones de bases de datos . La extensión MySQL actual no se puede mejorar , por ejemplo, para proporcionar soporte Unicode , y, finalmente, se eliminarán a partir de la versión PHP 6 . Orientada a Objetos Estructura
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 la integración de MySQL encaja mejor con PHP versión 5 características orientadas a objetos y con frecuencia elimina la necesidad de crear variables adicionales para apoyar las operaciones de MySQL y tareas. Por ejemplo , a continuación se muestra el código para conectarse a un servidor de base de datos y abrir 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
Quizás la mayor diferencia entre MySQL y MySQLi es el apoyo de MySQLi para comandos preparados . Con MySQL , hay que tener un cuidado especial para escapar de cada cadena que se utiliza en una consulta para prevenir los 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 de igualdad a los distintos valores que desee usar 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 MySQL utilizando MySQLi :
$ stmt = $ db -> prepare ( "INSERT INTO personas ( FullName , Email ) valores ( , ), $ ? stmt -> bind_param ( "ss ", $ nombre completo , $ email ), $ nombre completo = " John Johnson" , $ email = " john@johnjohnson.com " ; $ stmt -> execute ( ), $ nombre completo = " Mary Johnson " $ email = " mary@johnjohnson.com " ; $ stmt -> execute (); $ stmt -> close () ;
Eficiencia mejoras
Debido a declaraciones preparadas y otras mejoras en la eficiencia , la extensión MySQLi deben realizar más rápido que las declaraciones de MySQL equivalentes. Como se puede ver en el ejemplo anterior, el uso de sentencias preparadas , sólo se requiere la sobrecarga de una inserción una vez, cuando se prepara la declaración. con un inserto MySQL equivalente , la sobrecarga de la inserción se repite con cada inserción consulta a la base de datos.
Transacciones
MySQLi proporciona una funcionalidad adicional en la forma de transacciones. Con la extensión mysqli , puede agrupar un conjunto de operaciones de datos juntos en una transacción y ejecuta las operaciones en conjunto como una sola transacción. Si una operación en la operación falla, toda la operación falla y cualquier los cambios que se han hecho se deshacen. Por ejemplo , podría usar una transacción cuando se programa una transferencia de dinero entre dos cuentas , porque a menos que ambas partes de la operación de éxito, la operación no es un éxito, y que no quieren dejar un estado en el que una cuenta ha sido cargada , pero la otra cuenta no ha sido acreditado .