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. 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'impacte 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 | Passage en obsolète annoncé |
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 |