Quelle extension choisir entre mysql, mysqli et PDO ?

PHP dispose de 3 API permettant de communiquer avec MySQL : l’historique mysql (PHP 4.x et moins), mysqli (PHP 5.x) et PDO (PHP 5.x).

Quels sont les avantages et les inconvénients de chacune d’elle et laquelle doit-on utiliser dans ses scripts ?

L’extension mysql

Tout d’abord, parlons un peu de l’extension originale mysql. C’est la plus connue et on la retrouve, hélas, dans de nombreux scripts disponibles sur le Web.

De nombreux débutants l’utilisent encore en 2011, ce qui est une vraie erreur. En effet cette extension n’est incluse la distribution PHP que pour des raisons de compatibilité avec les anciens scripts. Elle n’est plus développée depuis la sortie de PHP 5.0 en 2004. Les seules modifications apportées à cette extension sont des opérations de maintenance, par exemple la correction de failles de sécurité.

De plus cette extension ne supporte que les spécificités de MySQL versions 4.1 et inférieures (pour rappel, à la date où j’écris cet article nous sommes à la version 5.6 de MySQL). En fait la seule raison d’utiliser aujourd’hui cette extension serait d’hériter d’un vieux projet tournant sous PHP 4.x ou moins et dont on ne pourrait pas mettre à jour la version de PHP.

L’extension mysqli

Le « i » signifie « improved » (amélioré) et explique bien ce qu’est cette extension : une version améliorée de l’ancienne extension mysql. Mysqli est disponible depuis PHP 5.0 et est l’extension par défaut pour les versions récentes de PHP.

Cette API supporte les spécificités des versions supérieures à 4.1 de MySQL et possède de nombreux avantages par rapport a l’ancienne extension mysql :

  • Interface au choix orientée objet ou procédurale
  • Support des requêtes préparées
  • Support des commandes multiples
  • Support des Transactions
  • Capacités de débogage avancées
  • Support du serveur embarqué

Mysqli est construite pour travailler en mode orienté objet. Si vous vous lancez dans un nouveau projet utilisant cette API c’est un bon choix de travailler dans ce mode. Néanmoins elle autorise de travailler en mode procédural comme avec l’ancienne API mysql. Cela peut être pratique pour 2 raisons :

  • On peut facilement convertir un projet utilisant l’ancienne mysql pour travailler avec mysqli, pour cela il suffit dans la plupart des cas des simplement changer le nom des fonctions mysql_* par mysqli_*. Et c’est tout.
  • Si on n’est pas habitué à la programmation orientée objet ou si on ne souhaite tout simplement pas l’utiliser, alors on peut travailler avec mysqli en mode procédural.

D’après la documentation officielle de PHP, cette extension est celle à préférer lorsqu’on souhaite développer un nouveau projet utilisant MySQL (voir tableau comparatif à la fin de l’article).

Pour aller plus loin reportez-vous à la documentation officielle de mysqli.

L’extension PDO

L’abréviation PDO signifie PHP Data Object. Il s’agit d’une couche d’abstraction de base de données. En clair PDO permet de travailler avec MySQL mais aussi avec de nombreux autres gestionnaires de bases de données. L’avantage est que vous apprenez les commandes PDO et si vous devez travailler un jour sur un projet utilisant un autre moteur de base de données que MySQL vous n’avez pas à réapprendre de nouvelles commandes.

PDO gère automatiquement les différences entre les différents types de bases de données de façon transparente. Cela signifie que si vous utilisez une fonction PDO qui n’est pas supportée par votre moteur de base de données, PDO se chargera d’émuler la fonctionnalité de manière transparente.

L’utilisation de PDO se fait en mode orienté objet et il est très simple à utiliser. De plus cette API supporte la plupart des spécificités des versions modernes de MySQL (mais moins que mysqli).

Pour aller plus loin reportez-vous à la documentation officielle de PDO.

Comparatif des 3 extensions

Voici un tableau comparant mysql, mysqli et PDO et tiré de la documentation officielle de PHP :

Extension mysqli PDO (avec le pilote PDO MySQL Driver et MySQL Native Driver) Extension MySQL
Version d’introduction en PHP 5.0 5.0 Avant 3.0
Inclus en PHP 5.x Oui Oui Oui
Statut de développement MySQL Développement actif Développement actif depuis PHP 5.3 Maintenance uniquement
Recommandée pour les nouveaux projets MySQL Oui, et préférée Oui Non
L’API supporte les jeux de caractères Oui Oui Non
L’API supporte les commandes préparées Oui Oui Non
L’API supporte les commandes préparées coté client Non Oui Non
L’API supporte les procédures stockées Oui Oui Non
L’API supporte les commandes multiples Oui La plupart Non
Toutes toutes les fonctionnalités MySQL 4.1 et plus récent Oui La plupart Non

Conclusion

Oubliez l’obsolète extension mysql, elle ne permet pas de travailler correctement avec les versions récentes de MySQL et n’est présente que pour des raisons de compatibilité.

Préférez lui mysqli ou PDO. Selon vos goûts et vos besoins.

Got something to say? Go for it!

This site uses KeywordLuv. Enter YourName@YourKeywords in the Name field to take advantage.