La propriété $ connect_error est un outil de débogage important lors de l'utilisation de l'extension MySQLI de PHP pour les connexions de base de données. Lorsque la connexion à la base de données échoue, elle doit renvoyer un message d'erreur. Cependant, de nombreux développeurs constatent que lors du débogage des problèmes de connexion de la base de données: mysqli :: $ connect_error en renvoie un. Ceci est déroutant et n'est pas propice au positionnement rapide du problème. Cet article analysera en détail les raisons qui peuvent provoquer ce phénomène et fournir des solutions correspondantes.
La façon de base de se connecter à une base de données MySQL à l'aide d'une méthode orientée objet en PHP est la suivante:
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
Normalement, si la connexion échoue, $ connect_error doit contenir une chaîne décrivant l'erreur. Parfois, cependant, il renvoie une chaîne vide.
Le niveau de rapport d'erreur par défaut de PHP peut bloquer certains avertissements ou invites, ce qui a fait que Connect_error n'obtient pas de contenu spécifique.
Solution:
Assurez-vous d'activer les rapports d'erreur en haut du script:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Cela vous aidera à obtenir des informations d'erreur plus explicites tout en garantissant que MySQLI renvoie des descriptions d'erreur significatives lorsque la connexion échoue.
Si PHP ne charge pas correctement l'extension MySQLI , le nouveau MySQLI (...) n'effectuera pas réellement l'opération de connexion, et naturellement il n'y aura pas de message d'erreur.
Méthode de dépannage:
phpinfo();
Ou courir:
<?php
if (!extension_loaded('mysqli')) {
die("mysqli Extension non activée");
}
?>
Si vous n'êtes pas activé, vous pouvez ajouter ou décommenter dans php.ini :
extension=mysqli
Redémarrez le serveur et testez à nouveau.
Lorsque vous appelez New Mysqli () sans transmettre de paramètres:
$mysqli = new mysqli();
Cela ne lance pas d'erreur, mais renvoie un objet de connexion vide, et $ connect_error ne renvoie pas d'erreur pour le moment.
Solution: assurez-vous que les paramètres corrects sont fournis.
Certaines erreurs de configuration (telles que la résolution du nom d'hôte échoué) peuvent ne pas entraîner immédiatement le renvoi de la connexion à la connexion, mais doivent plutôt vérifier le connexion_errno pour déterminer s'il y a une erreur.
$mysqli = new mysqli("wronghost", "user", "pass", "db");
if ($mysqli->connect_errno) {
echo "Code d'erreur de connexion: " . $mysqli->connect_errno;
echo "message d'erreur: " . $mysqli->connect_error;
}
Dans certains cas extrêmes, Connect_error est vide mais Connect_errno n'est pas 0, qui peut être utilisé comme jugement auxiliaire.
Parfois, les erreurs de réglage des caractères ou de socket peuvent également provoquer une défaillance de la connexion, mais aucun message d'erreur n'est renvoyé.
Exemple:
$mysqli = new mysqli("localhost", "user", "pass", "db", null, "/wrong/socket");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
Il est recommandé de simplifier les paramètres de connexion et les problèmes de dépannage.
mysqli_report(MYSQLI_REPORT_ALL);
Ce paramètre oblige MySqli à lancer des exceptions, aidant à voir la source de l'erreur plus clairement.
À partir de PHP 8, MySQLI permet le mode d'exception par défaut. Si vous utilisez une ancienne version de PHP, vous pouvez l'activer manuellement:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Utiliser avec un coup d'essai:
try {
$mysqli = new mysqli("localhost", "user", "pass", "db");
} catch (mysqli_sql_exception $e) {
echo "Échec de la connexion: " . $e->getMessage();
}
Pendant le débogage, vous pouvez essayer d'utiliser délibérément les paramètres de connexion incorrects, tels que le mauvais nom d'utilisateur ou nom d'hôte, pour tester si $ connect_error est valide.
$mysqli = new mysqli("gitbox.net", "wronguser", "wrongpass", "testdb");
if ($mysqli->connect_error) {
echo "Échec de la connexion: " . $mysqli->connect_error;
} else {
echo "Connexion avec succès";
}
Si la chaîne vide est toujours retournée, le problème peut être sur l'environnement PHP ou le chargement d'extension.