<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Ce document vise à discuter PHP milieu mysqli::dump_debug_info Fonctions et MySQL Meilleures pratiques pour utiliser le mode débogage avec。</span></span><span>
</span><span><span class="hljs-comment">// Pas besoin de modifier cette section,Pour le positionnement et les tests d'articles uniquement。</span></span><span>
</span><span><span class="hljs-comment">// Configurer la connexion de la base de données(Exemples uniquement)</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// Assurez-vous que la connexion est réussie</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// utiliser dump_debug_info Exemple</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span></span>
Dans le développement quotidien, l'interaction entre les programmes PHP et MySQL cache souvent de nombreuses informations de débogage, en particulier lorsqu'il s'agit d'une concurrence élevée, de requêtes complexes ou d'étranglements de performance inexpliqués. MySQLI :: Dump_debug_info () est une fonction de débogage relativement impopulaire mais très utile qui peut nous aider à transmettre des informations d'état de connexion au niveau PHP vers le serveur MySQL. Cependant, appeler cette fonction seul est souvent difficile à observer son effet, et il ne peut vraiment jouer son rôle que lorsqu'il est utilisé en conjonction avec le mode de débogage de MySQL.
mysqli :: dump_debug_info () est une méthode dans la classe mysqli de PHP. Sa fonction est d'envoyer des demandes d'informations de débogage au serveur MySQL. Sa définition de fonction est la suivante:
<span><span><span class="hljs-keyword">bool</span></span><span> mysqli::</span><span><span class="hljs-variable constant_">dump_debug_info</span></span><span> ( </span><span><span class="hljs-keyword">void</span></span><span> )
</span></span>
Après avoir appelé cette fonction, le serveur MySQL rédigera les informations de débogage de la connexion actuelle à son fichier journal, à condition que la fonction de débogage soit activée par le serveur.
Pour que Dump_debug_info () fonctionne, vous devez d'abord activer le débogage du côté serveur MySQL. La méthode est la suivante:
Modifier le fichier de configuration <br> Ouvrez le fichier My.cnf ou My.ini et ajoutez les lignes suivantes (veuillez ajuster en fonction de votre chemin système):
<span><span><span class="hljs-section">[mysqld]</span></span><span>
</span><span><span class="hljs-attr">log_output</span></span><span>=FILE
</span><span><span class="hljs-attr">general_log</span></span><span>=</span><span><span class="hljs-number">1</span></span><span>
</span><span><span class="hljs-attr">general_log_file</span></span><span>=/var/log/mysql/general.log
</span></span>
Si un débogage plus fin est requis, vous pouvez démarrer MySQL avec le paramètre --debug , par exemple:
<span><span><span class="hljs-attribute">mysqld</span></span><span> --</span><span><span class="hljs-literal">debug</span></span><span>=d:t:i:o,/tmp/mysql_debug.log
</span></span>
Redémarrer le service MySQL
<span><span>sudo systemctl restart mysql
</span></span>
Vérifier les autorisations du chemin du journal <br> Assurez-vous que MySQL a la permission d'écrire aux fichiers journaliers, en particulier sous / tmp ou / var / log / mysql / .
Voici quelques scénarios d'utilisation pratiques qui montrent comment déboguer les problèmes en combinaison avec dump_debug_info () :
Lorsque vous soupçonnez que certaines connexions ne sont pas correctement fermées ou libérées après l'exécution, vous pouvez les appeler après avoir effectué une série d'opérations de base de données:
<span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = 1"</span></span><span>);
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>();
</span></span>
À l'heure actuelle, le journal MySQL enregistrera l'état interne de la connexion, ce qui aidera à analyser des problèmes tels que la fuite des ressources.
Lors de l'exécution d'une mise à jour par lots ou d'un script de nettoyage des données, Dump_debug_info () est appelé une fois à chaque étape pour suivre le chemin d'exécution de la connexion actuel du côté du serveur. Par exemple:
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$userIds</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$id</span></span><span>) {
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE users SET status = 'active' WHERE id = <span class="hljs-subst">$id</span></span></span><span>");
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>(); </span><span><span class="hljs-comment">// Rédiger des informations de débogage à chaque fois qu'il est mis à jour</span></span><span>
}
</span></span>
Si le journal de requête lent est activé, combiné avec l'horodatage de Dump_debug_info () , vous pouvez localiser quel morceau de code a déclenché la requête lente.
L'appel à vidage_debug_info () ne renverra aucune donnée du côté PHP, ni ne lancera d'exception. Les informations de débogage sont pleinement reflétées dans le journal MySQL.
Il n'est pas recommandé d'utiliser cette fonction fréquemment dans les environnements de production car il augmente la charge d'E / S.
Contrairement à la fonction mysqli_debug () , Dump_debug_info () est un instantané d'exécution de l'état de la connexion actuelle, plutôt que de configurer des paramètres de débogage global.
Bien que MySqli :: Dump_debug_info () ne soit pas courant dans la plupart des projets, il s'agit d'un outil indispensable lorsqu'il doit travailler en étroite collaboration avec la couche DBA ou serveur pour résoudre les problèmes. En configurant rationnellement le journal de débogage de MySQL et en appelant cette fonction à un emplacement critique, les développeurs peuvent mieux observer et optimiser le comportement interactif entre PHP et la base de données, améliorant finalement la stabilité et les performances du système.