: Rapport les erreurs de connexion et de requête via le mécanisme d'exception ( PDOException ). Le code peut être capturé à l'aide de Try ... Catch , et les informations d'exception contiennent des descriptions d'erreur détaillées.
mysqli : utilisez des propriétés et des méthodes telles que $ mysqli-> connect_error et $ mysqli-> connect_errno pour signaler les erreurs de connexion. Les erreurs ne lancent pas automatiquement des exceptions et doivent être détectées et traitées activement.
En d'autres termes, l'APD s'appuie davantage sur les mécanismes d'exception, tandis que MySQLI s'appuie davantage sur la vérification des erreurs explicites.
try {
$pdo = new PDO('mysql:host=gitbox.net;dbname=testdb;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connexion avec succès";
} catch (PDOException $e) {
echo "Échec de la connexion: " . $e->getMessage();
}
$mysqli = new mysqli('gitbox.net', 'username', 'password', 'testdb');
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
echo "Connexion avec succès";
Remarque: MySqli obtient le message d'erreur de connexion via $ mysqli-> connect_error , et ne lancera pas automatiquement des exceptions et doit être vérifié manuellement.
L'OPD utilise des exceptions et la structure du code est plus simple et plus sûre.
MySqli doit juger explicitement $ mysqli-> connect_error ou $ mysqli-> connect_errno .
Si vous avez l'habitude d'utiliser Try ... Catch pour attraper des exceptions, vous devez ajuster la logique de traitement des erreurs après le passage à MySQLI.
PDO spécifie directement le jeu de caractères dans la chaîne de connexion DSN, telle que charset = utf8 , MySQLI nécessite des appels supplémentaires:
$mysqli->set_charset('utf8');
Sinon, il y aura des problèmes avec le code chinois brouillé.
PDO prend en charge de nombreuses options de connexion, tandis que MySQLI prend en charge certaines options. Par exemple:
L'OPD peut être activé avec PDO :: att_persistent .
MySQLI nécessite un traitement supplémentaire ou utiliser différentes façons d'activer les connexions persistantes.
La déclaration de prétraitement PDO utilise $ stmt = $ PDO-> Préparer ($ SQL); Pour prendre en charge la liaison des paramètres nommés.
L'instruction MySQLI PRÉCROSSING utilise $ stmt = $ mysqli-> prépare ($ sql); , et seuls les espaces réservés d'interrogation sont soutenus.
Si le code d'origine utilise un grand nombre de paramètres nommés, il doit être réécrit comme point d'interrogation.
MySQLI ne lance pas des exceptions par défaut. Si vous souhaitez simuler la capture d'exception de l'APD, vous pouvez activer la fonction d'exception MySQLI:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Après ouverture, MySQLI lancera MySQLI_SQL_EXCEPT , qui est plus facile à gérer les erreurs de manière unifiée.
projet | PDO | mysqli |
---|---|---|
Gestion des erreurs | Exception Catch (essayez ... Catch) | Vérifiez à l'extérieur $ connect_error pour activer les exceptions |
Format de chaîne de connexion | String DSN (Charset peut être défini) | Définir Charset séparément, vous devez appeler set_charset () |
Liaison des paramètres de prétraitement | Soutenir les paramètres de dénomination | Seuls les espaces d'interrogation sont soutenus |
Support de connexion persistant | Défini par options | Besoin de méthodes différentes pour mettre en œuvre |
En bref, le passage de l'APD à MySQLI n'est pas seulement une méthode de connexion de remplacement, mais également en considérant de manière approfondie les différences de gestion des erreurs, de paramètres de codage, de relevés de prétraitement, etc. pour éviter les bogues implicites causés par une inadaptation.