Introduction

Cette section fournit des informations sur les solutions qui sont disponibles quand on développe une application PHP qui a besoin de s'interfacer avec une base de données MySQL.

Qu'est-ce qu'une API?

Une Interface de programmation d'application, une Application Programming Interface, ou encore API, définit les classes, méthodes, fonctions et variables dont une application va faire usage pour exécuter différentes tùches. Dans le cas des applications PHP, les communications avec une base de données se font généralement par une API qui est exposée dans une extension PHP.

Les API peuvent ĂȘtre procĂ©durales ou orientĂ©es objet. Avec une API procĂ©durale, il est possible d'appeler les fonctions pour exĂ©cuter des commandes; avec une API orientĂ©e objet, il faut crĂ©er des objets et appeler les mĂ©thodes de ces objets. Des deux, c'est la derniĂšre qui est gĂ©nĂ©ralement prĂ©fĂ©rĂ©e, car elle est plus moderne et conduit Ă  du code plus organisĂ©.

Lors de l'écriture d'applications PHP qui doivent se connecter à MySQL, il y a plusieurs API disponibles. Ce document présente ces API, et donne les informations pour choisir la meilleure solution pour l'application.

Qu'est-ce qu'un connecteur?

Dans la documentation MySQL, le terme connector fait référence à un logiciel qui permet à une application de se connecter à une base de données MySQL. MySQL fournit des connecteurs pour toute une collection de langages, y compris PHP.

Si l'application PHP a besoin de communiquer avec un serveur de base de donnĂ©es, il faut Ă©crire du code pour pouvoir se connecter, envoyer des requĂȘtes au serveur, etc. Un logiciel est nĂ©cessaire pour assurer l'interface que PHP va utiliser et gĂ©rer les communications entre l'application et le serveur de base de donnĂ©es : Ă©ventuellement, des bibliothĂšques intermĂ©diaires sont nĂ©cessaires. Ces logiciels sont appelĂ©s de maniĂšre gĂ©nĂ©rique des connecteurs, car ils permettent de se connecter Ă  un serveur de base de donnĂ©es.

Qu'est-ce qu'un pilote ?

Un pilote est un logiciel qui est conçu pour communiquer avec un type particulier de base de donnĂ©es. Un pilote peut aussi ĂȘtre appelĂ© une bibliothĂšque, telle que la MySQL Client Library ou le MySQL Native Driver. Ces bibliothĂšques implĂ©mentent le protocole de bas niveau pour communiquer avec un serveur MySQL.

Par exemple, la couche d'abstraction de base de données PHP Data Objects (PDO) utilise un ou plusieurs pilotes de base de données. Un de ces pilotes est le pilote PDO MYSQL, qui permet de faire l'interface avec MySQL.

Parfois, les dĂ©veloppeurs utilisent les termes de connecteur et de pilote de maniĂšre interchangeable, et cela peut ĂȘtre confus. Dans les documentations MySQL, le terme de pilote est rĂ©servĂ© aux logiciels qui sont la face spĂ©cifique avec la base de donnĂ©es du paquet.

Qu'est-ce qu'une extension?

Dans la documentation PHP, on rencontrera un autre terme : extension. Le code PHP est constituĂ© d'un cƓur, avec des extensions optionnelles. Les extensions liĂ©es Ă  MySQL de PHP, telles que l'extension mysqli et l'extension de pilote PDO MySQL, sont implĂ©mentĂ©es en utilisant le framework d'extension PHP.

Une extension expose typiquement une API à un développeur PHP, pour lui permettre de faciliter sa programmation. Cependant, certaines extensions qui utilisent le framework PHP n'exposent pas d'API au développeur PHP.

L'extension de pilote PDO MySQL, par exemple, n'expose pas d'API au développeur PHP, mais fournit une interface à la couche PDO.

Les termes API et extension ne devraient pas signifier la mĂȘme chose, car une extension PHP ne fournit pas d'API particuliĂšre au dĂ©veloppeur PHP.

Quelles sont les API PHP pour MySQL ?

Il y a deux API principales pour se connecter Ă  MySQL :

  • L'extension mysqli

  • PHP Data Objects (PDO)

Chacune a ses avantages et ses inconvénients. Les sections suivantes tendent à donner une présentation rapide de chaque API.

Qu'est-ce que l'extension mysqli de PHP ?

L'extension mysqli, ou, comme elle est parfois appelée, l'extension MySQL améliorée (i pour improved en anglais), a été développée pour tirer parti des nouvelles fonctionnalités des systÚmes MySQL version 4.1.3 et plus récent. L'extension mysqli est incluse dans PHP depuis les versions 5.

L'extension mysqli a un grand nombre d'avantages et d'améliorations par rapport à l'extension mysql :

  • Interface orientĂ©e objet

  • Support des commandes prĂ©parĂ©es

  • Support des commandes multiples

  • Support des transactions

  • CapacitĂ©s de dĂ©bogage avancĂ©es

En plus d'une interface orientée objet, l'extension propose aussi une interface procédurale.

L'extension mysqli est compilée avec le framework PHP, et son code source est rangé dans le dossier ext/mysqli.

Pour plus d'informations sur l'extension mysqli, voir MySQLi.

Qu'est-ce que l'extension PDO de PHP ?

PHP Data Objects, ou PDO, est une couche d'abstraction de base de données, spécifique à PHP. PDO propose une API cohérente pour les applications PHP, indépendamment du type de base de données avec laquelle on travaille. En théorie, lors de l'utilisation de PDO, il est possible de changer de base de données, disons de Firebird à MySQL, et ne faire que des changements mineurs au code PHP.

D'autres exemples de couches d'abstraction de base de données incluent JDBC pour Java et DBI pour Perl.

Si PDO a ses avantages, comme une API propre, simple et portable, ses inconvĂ©nients principaux sont qu'elle ne permet pas d'utiliser toutes les fonctionnalitĂ©s avancĂ©es des derniĂšres versions de MySQL. Par exemple, PDO ne permet pas de faire des requĂȘtes multiples.

PDO est implémenté en utilisant le framework PHP, et son code source est rangé dans le dossier ext/pdo.

Pour plus d'informations sur PDO, voir PDO.

Qu'est-ce que le pilote MySQL pour PDO ?

Le pilote PDO MYSQL n'est pas une API en tant que tel, au moins du point de vue du développeur PHP. En fait, le pilote PDO MYSQL fait partie de PDO, et fournit les fonctionnalités particuliÚres à MySQL. Le développeur appelle l'API PDO, mais PDO utilise le pilote PDO MYSQL pour assurer les communications avec MySQL.

Le pilote PDO MYSQL fait partie de la grande famille des pilotes PDO. Les autres pilotes disponibles assurent les communications avec Firebird et PostgreSQL, entre autres.

Le pilote PDO MYSQL est implémenté avec le framework d'extension de PHP. Son code source est situé dans le dossier ext/pdo_mysql. Il n'expose aucune API au développeur PHP.

Pour plus de détails sur le pilote PDO de MySQL, voir Pilote PDO MySQL.

Qu'est-ce que le pilote natif MySQL de PHP ?

Pour communiquer avec le serveur MySQL, l'extension mysqli et le pilote PDO MYSQL utilisent tous une bibliothÚque bas niveau qui implémente le protocole MySQL. Par le passé, la seule bibliothÚque disponible était la MySQL Client Library, aussi appelée libmysqlclient.

Cependant, l'interface prĂ©sentĂ©e par libmysqlclient n'Ă©tait pas optimisĂ©e pour les communications avec PHP, et libmysqlclient Ă©tait conçue Ă  l'origine en C, pour des applications de mĂȘme type. Pour cette raison, le pilote MySQL natif mysqlnd a Ă©tĂ© dĂ©veloppĂ© comme une alternative Ă  libmysqlclient pour les applications PHP.

L'extension mysqli et le pilote MySQL natif peuvent tous deux ĂȘtre configurĂ©s individuellement pour utiliser soit libmysqlclient soit mysqlnd. Comme mysqlnd a Ă©tĂ© conçu spĂ©cifiquement pour utiliser le systĂšme PHP, il propose de nombreux avantages et amĂ©liorations par rapport Ă  libmysqlclient. On est vivement encouragĂ©s Ă  en profiter.

Le MySQL Native Driver est implémenté sur la base du framework d'extension PHP. Le code source est dans ext/mysqlnd. Il n'expose aucune nouvelle API au développeur PHP.

Comparaison des fonctionnalités

La table suivante compare les fonctionnalités des méthodes principales pour se connecter à MySQL depuis PHP :

Comparaison des options MySQL API pour PHP
  Extension mysqli PDO (avec le pilote PDO MySQL Driver et MySQL Native Driver)
Version d'introduction en PHP 5.0 5.0
Statut de développement MySQL Développement actif Développement actif
L'API supporte les jeux de caractĂšres Oui Oui
L'API supporte les commandes préparées cÎté serveur Oui Oui
L'API supporte les commandes préparées cÎté client Non Oui
L'API supporte les procédures stockées Oui Oui
L'API supporte les commandes multiples Oui La plupart
Toutes les fonctionnalités MySQL 4.1 et plus récent Oui La plupart
add a note

User Contributed Notes 1 note

up
31
guatebus at dot gmail dot com ¶
12 years ago
The text: "PDO does not allow you to use MySQL's support for Multiple Statements" is outdated.

Since v5.3, PHP intoduced multiple statement support into PDO (by PDO_MYSQLND driver replacing the previous PDO_MYSQL).