Les opérations de base de données de débogage peuvent se compliquer lors du développement de PHP, en particulier lors de la gestion des connexions de la base de données dans une seule application. La méthode MySQLI :: Debug de PHP est un outil de débogage moins mentionné mais très utile, en particulier adapté à l'analyse des connexions de la base de données, de l'exécution de déclarations et même de la visualisation des activités de réseau sous-jacentes.
Cet article introduira en détail comment utiliser efficacement la méthode MySQLI :: Debug lors de la débogage des connexions de la base de données et l'expliquez en combinaison avec un exemple de code.
MySQLI :: Debug () est une méthode statique fournie dans l'extension MySQLI, qui est utilisée pour envoyer des informations de débogage à la bibliothèque client MySQL, principalement utilisée dans le processus de développement et de débogage. Cette fonction ne renvoie rien, sa fonction principale est d'écrire des informations de débogage dans le fichier de débogage configuré par la bibliothèque client.
Pour le faire fonctionner, la prise en charge de débogage doit être activée dans MY.cnf ou my.ini (généralement configurée via Debug = D: T: O, / Tmp / Client.Trace dans la section client ), puis déclenchez la journalisation à l'aide de cette méthode.
mysqli::debug("d:t:o,/tmp/client.trace");
Cela rédigera des informations de débogage à /tmp/client.trace .
Lorsque plusieurs bases de données sont connectées à votre application, telles que la base de données principale et les répliques de lecture multiples, le débogage doit être plus ciblé. Voici quelques stratégies recommandées.
Vous pouvez encapsuler le processus de connexion de la base de données, ajouter un nom d'identification à chaque connexion et distinguer la source dans le journal de sortie.
function connect_to_db($label, $host, $user, $pass, $db) {
mysqli::debug("d:t:o,/tmp/{$label}_trace.log"); // Configurer le fichier de débogage pour chaque connexion
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Échec de la connexion ({$label}): " . $conn->connect_error);
}
return $conn;
}
$main_db = connect_to_db("main", "localhost", "root", "password", "main_db");
$replica_db = connect_to_db("replica", "localhost", "root", "password", "replica_db");
Bien que MySQLI :: Debug soit les informations de débogage sous-jacentes, il peut former un lien de débogage complet avec la sortie du journal de PHP.
mysqli::debug("d:t:o,/tmp/replica_trace.log");
$replica_conn = new mysqli("localhost", "user", "pass", "replica_db");
if ($replica_conn->connect_error) {
error_log("Échec de la connexion à la base de données de répliques: " . $replica_conn->connect_error);
} else {
error_log("La connexion à la base de données de répliques avec succès: " . $replica_conn->host_info);
}
Vous pouvez utiliser comme http://m66.net/log-viewer pour créer une interface de visualisation de journal pour localiser rapidement les problèmes.
Dans un environnement de développement ou de test, vous ne voudrez peut-être pas appeler manuellement mysqli :: débogage à chaque fois. À l'heure actuelle, vous pouvez utiliser des variables d'environnement ou des fichiers de configuration pour contrôler l'opportunité d'activer le débogage.
if (getenv("DB_DEBUG") === "true") {
mysqli::debug("d:t:o,/tmp/debug_trace.log");
}
Ajouter le fichier .env :
DB_DEBUG=true
La combinaison de mysqli_report () peut mieux capter des erreurs:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
mysqli::debug("d:t:o,/tmp/debug_trace.log");
$conn = new mysqli("localhost", "user", "pass", "some_db");
Cela lancera des exceptions au lieu de défaillances silencieuses, ce qui vous permet de suivre plus facilement les problèmes au niveau du code.