Plugins et drivers MySQL MySQL 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 MySQL Introduction 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/mysqli PDO_MySQL Introduite en PHP version 5.0 5.1 Inclus avec PHP 7.x et 8.x Oui Oui Statut du développement Active Active Cycle de vie Active Active Recommandé pour de nouveaux projets Oui Oui Interface orientée objet Oui Oui Interface procédurale Oui Non L'API supporte les requêtes non-bloquantes, asynchrones avec mysqlnd Oui Non Connexions persistantes disponibles Oui Oui L'API supporte les jeux de caractères Oui Oui L'API supporte les requêtes préparées côté serveur Oui Oui L'API supporte les requêtes préparées côté client Non Oui L'API supporte les procédures stockées Oui Oui L'API supporte les requêtes multiples Oui La plupart L'API supporte les transactions Oui Oui Les transactions peuvent être contrôlées avec SQL Oui Oui Supporte toutes les fonctionnalités de MySQL 5.1+ Oui La plupart Choisir 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 libmysqlclient Comparaison 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 PHP Oui Non Introduit en version de PHP 5.3.0 N/A Licence PHP Licence 3.01 Double-licence Statut de développement Actif Actif Cycle de vie Pas de fin d'annoncé Pas de fin d'annoncé Compilé par défaut (pour toutes les extensions MySQL) Oui Non Support du protocole de compression Oui Oui Support de SSL Oui Oui Support des pipes nommés Oui Oui Requêtes non bloquantes, asynchrones Oui Non Statistiques sur les performances Oui Non LOAD LOCAL INFILE respecte la directive open_basedir Oui Non Utilisation du système de gestion de la mémoire native de PHP (i.e., suit les limites mémoires de PHP) Oui Non Retourne les colonnes numériques sous la forme de double (COM_QUERY) Oui Non Retourne les colonnes numériques sous la forme de chaînes de caractères (COM_QUERY) Oui Oui API du plugin Oui Limité Reconnexion automatique Non Optionnel &reference.mysqlinfo.concepts; &reference.mysqli.book; &reference.mysql-xdevapi.book; &reference.mysql.book; &reference.mysqlnd.book;