Position actuelle: Accueil> Derniers articles> Comment utiliser mysqli :: $ errno et mysqli_report () pour améliorer l'efficacité du débogage de PHP et localiser rapidement les erreurs de connexion de la base de données?

Comment utiliser mysqli :: $ errno et mysqli_report () pour améliorer l'efficacité du débogage de PHP et localiser rapidement les erreurs de connexion de la base de données?

M66 2025-06-23

Les erreurs de connexion de la base de données sont un problème commun mais induisant les maux de tête dans le développement quotidien de PHP. Surtout lorsque vous utilisez des extensions MySQLI, les messages d'erreur sont souvent flous et il est difficile de localiser rapidement la source du problème. Afin d'améliorer l'efficacité du débogage, les deux outils mysqli :: $ errno et mysqli_report () sont particulièrement importants. Cet article présentera leurs fonctions et leur utilisation en profondeur pour aider les développeurs à identifier et à résoudre rapidement les erreurs de connexion de la base de données.

1. Qu'est-ce que mysqli :: $ errno?

MySQLI :: $ Errno est une propriété dans l'interface orientée objet MySQLI qui renvoie le code d'erreur généré par la dernière opération de base de données. S'il n'y a pas d'erreur, la valeur de retour est 0. En jugeant ce code d'erreur, les développeurs peuvent en savoir plus clairement le type d'erreur, par exemple s'il s'agit d'une défaillance d'authentification, la base de données n'existe pas, etc.

Exemple:

 $mysqli = new mysqli("localhost", "user", "wrong_password", "database");

if ($mysqli->connect_errno) {
    echo "Échec de la connexion,Code d'erreur: " . $mysqli->connect_errno . "\n";
    echo "message d'erreur: " . $mysqli->connect_error . "\n";
    // 可根据Code d'erreur做精细化处理
    if ($mysqli->connect_errno === 1045) {
        echo "indice:Veuillez vérifier si le nom d'utilisateur ou le mot de passe de la base de données est correct。";
    }
}

Dans l'exemple ci-dessus, si le mot de passe est faux, un code d'erreur 1045 sera renvoyé, indiquant que l'authentification a échoué. En jugeant ce code d'erreur, nous pouvons inviter l'utilisateur ou le développeur à le corriger.

2. Qu'est-ce que mysqli_report ()?

MySQLI_Report () est une fonction de configuration qui définit le comportement de rapport d'erreur des extensions MySqli. Par défaut, les erreurs MySQLI ne renvoient que les valeurs booléennes ou nulles, et les développeurs doivent vérifier manuellement chaque étape. Après avoir allumé les rapports d'erreurs, MySQLI lancera un avertissement ou une exception, simplifiant le processus de débogage.

Niveaux de rapport communs:

  • Mysqli_report_off : éteignez tous les rapports d'erreur (par défaut).

  • Mysqli_report_error : signaler une erreur.

  • Mysqli_report_strict : lance une erreur dans le formulaire d'exception (recommandé).

  • Mysqli_report_all : signaler toutes les erreurs, y compris les avertissements de syntaxe, etc.

Exemple:

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = new mysqli("localhost", "user", "wrong_password", "database");
    // Exécuter une requête incorrecte
    $mysqli->query("SELECT * FROM Une table inexistante");
} catch (mysqli_sql_exception $e) {
    echo "Une erreur s'est produite: " . $e->getMessage() . "\n";
    echo "Code d'erreur: " . $e->getCode() . "\n";
    // Vous pouvez enregistrer ou signaler des erreurs
    file_put_contents("/var/log/db_errors.log", $e->getMessage(), FILE_APPEND);
}

Cette méthode d'écriture simplifie non seulement la logique de code, mais simule rapidement l'emplacement où l'erreur se produit, ce qui le rend très adapté à une utilisation au stade de développement.

3. Compétences pratiques: combinez l'erreur et le mécanisme de rapport pour localiser rapidement les erreurs

Dans les projets réels, il est recommandé d'activer un mécanisme de rapport d'erreur strict dans l'environnement de développement ou de test (en utilisant mysqli_report () ), et en même temps combiner mysqli :: $ errno pour faire des jugements plus détaillés lors de la capture d'exceptions.

Structure du code d'initialisation recommandé:

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = new mysqli("localhost", "user", "password", "database");
    echo "La connexion de la base de données est réussie";
} catch (mysqli_sql_exception $e) {
    echo "数据库Échec de la connexion,message d'erreur: " . $e->getMessage();
    
    // 如果需要追踪具体Code d'erreur
    if (strpos($e->getMessage(), '1049') !== false) {
        echo "\nindice:La base de données n'existe pas,Veuillez vérifier le nom de la base de données。";
    } elseif (strpos($e->getMessage(), '1045') !== false) {
        echo "\nindice:Nom d'utilisateur ou mot de passe incorrect,Veuillez vérifier les informations de certification。";
    }
}

Vous pouvez également combiner des systèmes de journalisation personnalisés pour enregistrer les messages d'erreur aux services de journal local ou distant, tels que:

 $logData = date('Y-m-d H:i:s') . " Erreur de base de données: " . $e->getMessage() . "\n";
file_put_contents("https://m66.net/logs/db_errors.log", $logData, FILE_APPEND);

Remarque: Le nom de domaine URL dans l'exemple ci-dessus a été remplacé par m66.net . Veuillez gérer la logique de réception du journal distant en fonction de la situation réelle.

4. Résumé

En utilisant rationnellement mysqli :: $ errno et mysqli_report () , l'efficacité de débogage PHP peut être considérablement améliorée, et des erreurs peuvent être trouvées et situées dès que possible lorsqu'il y a un problème avec la connexion de la base de données. Il est recommandé d'activer toujours le mode strict ( mysqli_report_strict ) dans l'environnement de développement, et de coopérer avec les mécanismes de gestion des exceptions pour effectuer des rétrogradations en toute sécurité ou une connexion dans les environnements de production.

Le débogage n'est pas l'objectif, la stabilité est l'objectif. Faire bon usage de ces deux gadgets rendra vos opérations de base de données PHP plus contrôlables, mesurables et maintenables.