Plugins et drivers MySQLMySQL
PHP offre plusieurs drivers et plugins MySQL pour accéder
et gérer MySQL.
Les différences et les fonctionnalités des extensions MySQL
sont décrites dans la résumé de cette section.
Aperçu des drivers PHP MySQLIntroduction
Il y a plusieurs APIs PHP pour accéder à une base de données MySQL.
Les utilisateurs peuvent choisir entre les extensions
mysqli ou
PDO_MySQL.
Ce guide explique la terminologie
utilisée pour décrire chacune d'elles, fournit des informations
quant aux choix de l'API
à utiliser, ainsi que des informations vous permettant de vous
aider à choisir la bibliothèque
MySQL à utiliser avec l'API.
Aperçu de la terminologie
Cette section fournit une introduction aux options qui vous sont disponibles
lors du développement d'une application PHP qui doit interagir avec
une base de données MySQL.
Qu'est-ce qu'une API ?
Une interface de programmation d'application, ou API, définit les classes,
les méthodes, les fonctions et les variables dont votre application
a besoin pour réaliser les tâches désirées. Dans le cas des applications
PHP qui ont besoin de communiquer avec des bases de données, les APIs
nécessaires sont habituellement exposées via des extensions PHP.
Les APIs peuvent être procédurales ou orientées objet. Avec une API
procédurale, vous appelez des fonctions pour réaliser vos tâches,
avec une API orientée objet, vous instanciez les classes, puis vous
appelez les méthodes sur les objets résultants. La seconde interface
est généralement préférée car elle est plus moderne et permet
de mieux organiser le code source.
Lors de l'écriture d'applications PHP qui ont besoin de se connecter
à un serveur MySQL, il y a plusieurs options de l'API disponibles.
Ce document va aborder ce qui est disponible, et comment choisir
la meilleure solution pour votre application.
Qu'est-ce qu'un connecteur ?
Dans la documentation MySQL, le terme connecteur
se réfère à la partie du programme qui autorise votre application
à se connecter au serveur de base de données MySQL. MySQL fournit
des connecteurs pour bons nombres de langages, incluant PHP.
Si votre application PHP a besoin de communiquer avec un serveur
de base de données, vous devez écrire votre code PHP pour effectuer
des tâches comme se connecter au serveur de base de données,
requêter la base de données ainsi que d'autres tâches relatives
à la base de données. Le programme est requis pour fournir l'API
à utiliser par votre application PHP, mais aussi pour gérer
la communication entre votre application et le serveur de base
de données, en utilisant des bibliothèques intermédiaires
au besoin. Ce programme est généralement appelé connecteur,
vu qu'il autorise votre application à se connecter
au serveur de base de données.
Qu'est-ce qu'un driver ?
Un driver est une partie de programme dont le but est de communiquer
avec un type spécifique de serveur de base de données. Le driver
peut également appeler une bibliothèque, comme la bibliothèque
cliente MySQL ou le driver natif MySQL. Ces bibliothèques implémentent
le protocole bas niveau utilisé pour communiquer avec le serveur
de base de données MySQL.
Par le biais d'un exemple, la couche d'abstraction de base de données
PHP Data Objects (PDO) peut
utiliser un des drivers spécifiques au base de données. Un de ces drivers
disponible est le driver PDO MYSQL, qui fournit une interface
avec le serveur MySQL.
Quelques fois, des personnes utilisent les termes connecteur et driver
à l'envers, ce qui peut porter à confusion. Dans la documentation
MySQL, le terme driver est réservé au programme qui
fournit la partie spécifique à la base de données d'un connecteur.
Qu'est-ce qu'une extension ?
Dans la documentation PHP, vous trouverez un autre terme -
extension. Le code PHP est constitué
d'un cœur, avec des extensions optionnelles permettant
d'étendre les fonctionnalités du cœur. Les extensions PHP relatives
aux bases de données, comme l'extension mysqli
qui est implémentée en utilisant le framework des extensions PHP.
Typiquement, une extension expose une API au programmeur PHP, lui
permettant quelques facilités lors de la programmation. Cependant,
quelques extensions qui utilisent le framework d'extension PHP
n'expose aucune API au programmeur PHP.
L'extension driver PDO MySQL, par exemple, n'expose aucune API
au programmeur PHP, mais fournit une interface à la couche PDO.
Les termes API et extension ne doivent pas être vus comme signifiant
la même chose, car une extension n'expose pas forcément une API au
programmeur.
Choisir une API
PHP offre des APIs différentes pour se connecter à MySQL. Ci-dessous, vous
trouverez les APIs fournies par les extensions mysqli et PDO.
Chaque exemple de code crée une connexion à un serveur MySQL s'exécutant sur
le domaine "example.com", en utilisant le nom d'utilisateur "user", le mot
de passe "password". Et une requête est exécutée pour saluer l'utilisateur.
Comparaison des APIs MySQL
query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
]]>
Comparaison des fonctionnalités
La performance globale des deux extensions peut être considérée comme identique.
Malgré tout, la performance de l'extension constitue seulement une fraction
du temps total d'exécution d'une requête web PHP.
Souvent, l'impact est inférieur à 0.1%.
ext/mysqliPDO_MySQLIntroduite en PHP version5.05.1Inclus avec PHP 7.x et 8.xOuiOuiStatut du développementActiveActiveCycle de vieActiveActiveRecommandé pour de nouveaux projetsOuiOuiInterface orientée objetOuiOuiInterface procéduraleOuiNonL'API supporte les requêtes non-bloquantes, asynchrones avec mysqlndOuiNonConnexions persistantes disponiblesOuiOuiL'API supporte les jeux de caractèresOuiOuiL'API supporte les requêtes préparées côté serveurOuiOuiL'API supporte les requêtes préparées côté clientNonOuiL'API supporte les procédures stockéesOuiOuiL'API supporte les requêtes multiplesOuiLa plupartL'API supporte les transactionsOuiOuiLes transactions peuvent être contrôlées avec SQLOuiOuiSupporte toutes les fonctionnalités de MySQL 5.1+OuiLa plupartChoisir une bibliothèque
Les extensions PHP mysqli et PDO_MySQL sont des wrappers légers d'une
bibliothèque cliente C. Les extensions peuvent soit utiliser la bibliothèque
mysqlnd, soit la bibliothèque libmysqlclient.
Le choix de la bibliothèque se fait au moment de la compilation.
La bibliothèque mysqlnd fait partie de la distribution de PHP.
Elle offre des fonctionnalités comme les connexions paresseuses,
la mise en cache de requêtes, qui ne sont pas disponibles avec libmysqlclient,
aussi, nous vous recommandons d'utiliser la bibliothèque interne mysqlnd.
Voir la documentation de mysqlnd
pour plus d'informations,ainsi qu'une liste des fonctionnalités qu'elle offre.
Commande de configuration pour l'utilisation de mysqlnd ou de libmysqlclientComparaison des fonctionnalités des bibliothèques
Il est recommandé d'utiliser la bibliothèque mysqlnd
au lieu de la bibliothèque client serveur MySQL (libmysqlclient). Les deux bibliothèques
sont supportées et améliorées en permanence.
Driver natif MySQL (mysqlnd)Bibliothèque client serveur MySQL (libmysqlclient)Fait partie de la distribution de PHPOuiNonIntroduit en version de PHP5.3.0N/ALicencePHP Licence 3.01Double-licenceStatut de développementActifActifCycle de viePas de fin d'annoncéPas de fin d'annoncéCompilé par défaut (pour toutes les extensions MySQL)OuiNonSupport du protocole de compressionOuiOuiSupport de SSLOuiOuiSupport des pipes nommésOuiOuiRequêtes non bloquantes, asynchronesOuiNonStatistiques sur les performancesOuiNonLOAD LOCAL INFILE respecte la directive open_basedirOuiNonUtilisation du système de gestion de la mémoire native de PHP
(i.e., suit les limites mémoires de PHP)OuiNonRetourne les colonnes numériques sous la forme de double (COM_QUERY)OuiNonRetourne les colonnes numériques sous la forme de chaînes de caractères (COM_QUERY)OuiOuiAPI du pluginOuiLimitéReconnexion automatiqueNonOptionnel
&reference.mysqlinfo.concepts;
&reference.mysqli.book;
&reference.mysql-xdevapi.book;
&reference.mysql.book;
&reference.mysqlnd.book;