Choisir une API

PHP offre 3 APIs différentes pour se connecter à MySQL. Ci-dessous, vous trouverez les APIs fournies par les extensions mysql, 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.

Exemple #1 Comparaison des 3 APIs MySQL

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->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']);

// mysql
$c = mysql_connect("example.com", "user", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>

API recommandé

Il est recommandé d'utiliser soit l'extension mysqli, soit l'extension PDO_MySQL. Il n'est pas recommandé d'utiliser l'ancienne extension mysql pour de nouveaux développements sachant qu'elle est obsolète depuis PHP 5.5.0, et sera supprimée dans un futur proche. Une matrice de comparaison détaillant les fonctionnalités est fournie ci-dessous. La performance globale des 3 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. Aussi, l'impact est inférieur à 0.1%.

Comparaison des fonctionnalités

  ext/mysqli PDO_MySQL ext/mysql
Introduite en PHP version 5.0 5.1 2.0
Inclus avec PHP 5.x Oui Oui Oui
Statut du développement Active Active Uniquement de la maintenance
Cycle de vie Active Active Obsolète
Recommandé pour de nouveaux projets Oui Oui Non
Interface orientée objet Oui Oui Non
Interface procédurale Oui Non Oui
L'API supporte les requêtes non-bloquantes, asynchrones avec mysqlnd Oui Non Non
Connexions persistentes disponibles Oui Oui Oui
L'API supporte les jeux de caractères Oui Oui Oui
L'API supporte les requêtes préparées côté serveur Oui Oui Non
L'API supporte les requêtes préparées côté client Non Oui Non
L'API supporte les procédures stockées Oui Oui Non
L'API supporte les requêtes multiples Oui La plupart Non
L'API supporte les transactions Oui Oui Non
Les transactions peuvent être contrôlées avec SQL Oui Oui Oui
Supporte toutes les fonctionnalités de MySQL 5.1+ Oui La plupart Non
LoadingChargement en cours