Position actuelle: Accueil> Derniers articles> Pourquoi les informations sur le journal de MySqli :: Debug affichées sont-elles vides?

Pourquoi les informations sur le journal de MySqli :: Debug affichées sont-elles vides?

M66 2025-05-17

L'utilisation de mysqli :: debug () est une méthode très pratique de débogage des connexions MySqli et de l'exécution. Il peut enregistrer les appels sous-jacents, les détails de connexion, les instructions d'exécution et d'autres informations dans les fichiers journaux, aidant à analyser les problèmes. Mais parfois, les développeurs peuvent rencontrer un phénomène déroutant: après avoir appelé mysqli :: debug () , ils ne voient aucune sortie dans le fichier journal attendu et le journal est vide. Alors, quelle peut être la cause de cela?

1. Utilisez MySqli :: Debug correctement

Avant d'analyser le problème, nous confirmons d'abord si mysqli :: debug () est appelé correctement. L'utilisation de base est la suivante:

 mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("localhost", "username", "password", "database");

Expliquez les options de débogage:

  • D : Dispatcher de débogage (traçage général de débogage)

  • T : informations de suivi des enregistrements (traçage)

  • o, / tmp / client.trace : publiez le journal dans le fichier /tmp/client.trace

??Précautions:

  • MySqli :: Debug () doit être appelé avant de créer la connexion à prendre effet.

  • MySqli :: Debug () est une méthode statique qui n'a rien à voir avec l'instance de connexion spécifique.

2. Analyse des raisons courantes pour lesquelles les journaux sont vides

Voici quelques raisons courantes qui peuvent entraîner le vide les informations du journal:

1. Le support de débogage de Mysqli n'est pas activé

La fonction mysqli :: debug () repose sur la bibliothèque client MySQL (libmysqlclient ou mysqlnd). MySQLI :: Debug () n'est pris en charge que lors de l'utilisation de MySQLND (pilote natif de MySQL). Si votre PHP utilise libmysqlclient , la fonction de débogage peut ne pas prendre effet.

Vous pouvez confirmer par:

 echo mysqli_get_client_stats() ? 'mysqlnd' : 'libmysqlclient';

ou:

 phpinfo(); // Trouver mysqlnd De l'activer

Si vous utilisez libmysqlclient , il est recommandé de passer à mysqlnd .

2. Aucune autorisation d'écriture

Si le chemin de journal spécifié (tel que /tmp/client.trace ) ne peut pas être écrit sur PHP, le journal ne peut pas être généré ou vide. Assurez-vous que ce chemin a des autorisations d'écriture aux utilisateurs exécutant PHP (tels que www-data, apache, nginx).

Vous pouvez tester les autorisations:

 sudo touch /tmp/client.trace
sudo chown www-data:www-data /tmp/client.trace
sudo chmod 664 /tmp/client.trace

3. L'emplacement d'appel de débogage est incorrect

Si mysqli :: debug () est appelé après la création de la connexion, elle ne prendra pas effet. Assurez-vous de vous assurer qu'il est appelé avant New MySqli () !

Démonstration d'erreur:

 $mysqli = new mysqli("localhost", "username", "password", "database");
mysqli::debug("d:t:o,/tmp/client.trace"); // invalide!

Écriture correcte:

 mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("localhost", "username", "password", "database");

4. La connexion persistante est utilisée

Dans certains cas, si vous utilisez une connexion persistante sous forme de p: hôte , le débogage peut ne pas enregistrer les informations comme prévu. Vous pouvez essayer de dépanner avec des connexions non persistantes.

5. Aucune exécution SQL réelle

Si aucune requête n'est effectuée après l'établissement de la connexion, il ne peut y avoir aucune information dans le journal. Vous pouvez essayer d'ajouter un test de requête simple:

 mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->query("SELECT * FROM users");

3. Compétences et suggestions de débogage

  • Utilisez un chemin absolu pour sortir le journal, tel que /var/log/mysqli.trace , et définissez les autorisations appropriées.

  • Utilisez des scripts indépendants pour tester les fonctions de débogage chaque fois que possible pour éviter d'être interférées par une logique métier complexe.

  • Il est recommandé de ne pas placer le chemin du journal dans le réseau public pour accéder au répertoire pour éviter les fuites d'informations.

4. Exemple de code

 <?php
// Définir le chemin du journal de débogage
mysqli::debug("d:t:o,/tmp/mysqli_debug.log");

// Établir une connexion de base de données
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_database");

// Exécuter une requête
$result = $mysqli->query("SELECT * FROM users");

// Montrer les résultats
while ($row = $result->fetch_assoc()) {
    echo $row['username'] . "\n";
}
?>

Vous pouvez afficher la sortie du journal dans /tmp/mysqli_debug.log . N'oubliez pas de définir des autorisations d'écriture!

V. Autres ressources