La sortie de la version PHP 5 inclus une nouvelle extension pour accéder aux bases de données MySQL appelé MySQL améliorée, ou MySQLi . MySQLi offre des performances améliorées , une structure orientée objet, support pour les instructions préparées et des fonctionnalités supplémentaires sous la forme de transactions de base de données . L'extension MySQL actuel ne sera pas renforcée , par exemple pour fournir le support Unicode , et finira par être éliminée en commençant par la version de PHP 6. Object-Oriented Structure
MySQLi fournit un ensemble de fonctions pour une structure de code procédural de style pour faire la transition à partir de MySQL plus facile. Toutefois, il fournit également des fonctionnalités à travers un ensemble de classes orientées objet . Utiliser un style orienté objet peut faire de l'intégration de MySQL correspond mieux avec la version PHP 5 fonctionnalités orientées objet et élimine souvent la nécessité de créer des variables supplémentaires pour soutenir les opérations de MySQL et des tâches. Par exemple, le suivant illustre le code pour se connecter à un serveur de base de données et d'ouvrir une base de données MySQL et MySQLi : MySQL : DBC $ = mysql_connect (" localhost", " user", " password") ; $ db = mysql_select_database ( " base de données ");
mySQLi : $ db = new mysqli ("localhost ", " user", " password", " base de données ");
déclarations préparées
peut-être la plus grande différence entre MySQL et MySQLi est le soutien de MySQLi pour les commandes préparées . Avec MySQL , vous devez prendre des précautions particulières pour échapper à toutes les chaînes utilisées dans une requête pour empêcher les attaques par injection SQL. Avec MySQLi et déclarations préparées , vous liez un ensemble de paramètres à une requête et définir les paramètres correspondant aux différentes valeurs que vous voulez utiliser dans la requête. MySQLi prend soin de faire en sorte que tout le code est correctement échappé avant d'être appliqué à la base de données. Par exemple, le code insère deux suivants recrods dans une table MySQL en utilisant MySQLi :
$ stmt = $ db -> prepare ("INSERT INTO personnes ( 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 ();
efficacité améliorations
raison de déclarations préparées et d'autres améliorations de l'efficacité , l'extension MySQLi devraient fonctionner plus rapidement que les déclarations SQL équivalentes. Comme vous pouvez le voir dans l'exemple précédent en utilisant les requêtes préparées , la surcharge d'un insert n'est nécessaire une fois , lorsque l'instruction est préparée. avec un insert MySQL équivalent , les frais généraux de l'insert serait répété à chaque requête d'insertion à la base de données.
Transactions
MySQLi fournit des fonctionnalités supplémentaires sous la forme de transactions. Grâce à l'extension mysqli , vous pouvez regrouper un ensemble d'opérations de données ensemble dans une transaction et d'exécuter les opérations comme une seule transaction. Si une opération dans la transaction échoue, l' ensemble de l'opération échoue et tout modifications qui ont été apportées sont annulées . Par exemple , vous pourriez utiliser une transaction lors de la programmation d'un transfert d'argent entre deux comptes , parce que si les deux côtés de l'opération réussit, l'opération n'est pas un succès, et vous ne voulez pas quitter un état où un compte a été débité , mais l'autre compte n'a pas été crédité .