Lors du développement de projets PHP, les opérations de base de données sont souvent les plus sujettes aux erreurs. Afin de localiser rapidement les problèmes, des informations de débogage détaillées sont indispensables. L'extension MySQLI de PHP fournit des fonctions de débogage utiles, en particulier la méthode MySQLI :: Debug , qui peut aider les développeurs à obtenir des informations de débogage MySQL. En attendant, la fonction Error_Log est un outil puissant pour écrire des journaux d'erreur aux fichiers, les journaux système ou les envoyer aux e-mails. En combinant ces deux, les développeurs peuvent atteindre la sortie du journal de débogage de la base de données plus complète et intuitive.
MySQLI :: Debug est une méthode de la classe MySQLI qui peut sortir les informations de débogage sous-jacentes de la base de données MySQL. En utilisant cette méthode, les développeurs peuvent afficher les requêtes SQL exécutées, les informations de connexion et l'état du serveur MySQL. Ceci est très utile pour déboguer l'exécution des requêtes SQL.
En utilisant MySqli :: Debug est très simple, il vous suffit de l'appeler au bon endroit. Voici un exemple simple d'utilisation:
<span><span><span class="hljs-meta"><?php</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">"username"</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">// Activer le mode de débogage</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>); </span><span><span class="hljs-comment">// 'd' Indique des informations de débogage,'t' Indique des informations de suivi</span></span><span>
</span><span><span class="hljs-comment">// mettre en œuvre SQL Requête</span></span><span>
</span><span><span class="hljs-variable">$result</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">"SELECT * FROM users"</span></span><span>);
</span><span><span class="hljs-comment">// 检查Requête结果</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Dans cet exemple, $ mysqli-> debug ("d: t") permet la sortie d'informations de débogage. Ces informations seront diffusées directement vers le navigateur ou le terminal pour aider les développeurs à comprendre les détails d'exécution des requêtes MySQL.
ERROR_LOG est une fonction intégrée en PHP qui peut envoyer des messages d'erreur aux journaux système, spécifier des fichiers ou les envoyer aux administrateurs. Cette fonction est très utile, ce qui peut aider les développeurs à enregistrer les informations d'erreur et à spécifier où enregistrer le journal au besoin.
Le BASIC ERROR_LOG est utilisé comme suit:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Journaliser les informations d'erreur dans le fichier spécifié</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Database query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/path/to/your/logfile.log"</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Dans cet exemple, error_log ajoute le message d'erreur au fichier journal spécifié.
Bien que MySQLI :: Debug peut produire des informations de débogage de base de données détaillées, il peut ne pas toujours être idéal pour produire ces informations directement au navigateur, en particulier dans les environnements de production. Par conséquent, il est une meilleure pratique de publier ces informations dans un fichier journal en même temps pour le stockage pour une analyse ultérieure.
Il peut combiner MySQLI :: Debug et Error_Log pour obtenir une sortie de débogage plus flexible. Voici un exemple pratique:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Définissez la sortie de débogage dans le fichier journal</span></span><span>
</span><span><span class="hljs-variable">$logFile</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/logfile.log'</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">"username"</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">// Activer le mode de débogage</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
</span><span><span class="hljs-comment">// Enregistrer les informations de débogage dans le fichier journal</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Allumez la tampon de sortie</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
</span><span><span class="hljs-variable">$debugOutput</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_clean</span></span><span>();
</span><span><span class="hljs-comment">// Les informations de débogage de sortie dans le fichier journal spécifié</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$debugOutput</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"MySQL Debug Output: "</span></span><span> . </span><span><span class="hljs-variable">$debugOutput</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-variable">$logFile</span></span><span>);
}
</span><span><span class="hljs-comment">// mettre en œuvre SQL Requête</span></span><span>
</span><span><span class="hljs-variable">$result</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">"SELECT * FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$errorMsg</span></span><span> = </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
</span><span><span class="hljs-comment">// Enregistrer SQL Message d'erreur dans le fichier journal</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$errorMsg</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-variable">$logFile</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorMsg</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Dans le code ci-dessus, nous permettons d'abord les informations de débogage via mysqli :: débogage et capturez ces informations à l'aide d'OB_START et OB_GET_CLEAN . Ensuite, la sortie de débogage est connectée au fichier de journal spécifié via error_log . Une fois la requête SQL exécutée, si la requête échoue, nous enregistrerons également les messages d'erreur dans le même fichier journal.
Dans un environnement de production, les informations excessives de débogage peuvent rapidement devenir énormes dans les fichiers journaux, affectant les performances du système. Par conséquent, nous pouvons ajuster de manière flexible la production de débogage en fonction des conditions environnementales (telles que l'environnement de développement et l'environnement de production).
Par exemple, activez les informations de débogage détaillées dans l'environnement de développement et désactivez l'environnement de production:
<span><span><span class="hljs-meta"><?php</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">"username"</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">// 开发环境下Activer le mode de débogage</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getenv</span></span><span>(</span><span><span class="hljs-string">'ENVIRONMENT'</span></span><span>) === </span><span><span class="hljs-string">'development'</span></span><span>) {
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">debug</span></span><span>(</span><span><span class="hljs-string">"d:t"</span></span><span>);
}
</span><span><span class="hljs-comment">// mettre en œuvre SQL Requête</span></span><span>
</span><span><span class="hljs-variable">$result</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">"SELECT * FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"User: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$errorMsg</span></span><span> = </span><span><span class="hljs-string">"Query failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$errorMsg</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/path/to/your/logfile.log"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$errorMsg</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>En combinant MySQLI :: Debug et Error_Log , les développeurs peuvent capturer et enregistrer efficacement les informations de débogage de la base de données MySQL et les publier pour enregistrer des fichiers pour une analyse plus facile et un emplacement de problème. Dans un environnement de développement, les informations de débogage peuvent aider les développeurs à identifier rapidement les problèmes, tandis que dans un environnement de production, l'exploitation forestière raisonnable peut assurer le fonctionnement stable du système tout en retournant et en résolvant facilement les problèmes potentiels.
Étiquettes associées:
mysqli