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.
Exemple #1 Comparaison des 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']);
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 |