Position actuelle: Accueil> Derniers articles> Comment enregistrer les erreurs de base de données dans les fichiers journaux à l'aide de mysqli :: $ error and error_log ()?

Comment enregistrer les erreurs de base de données dans les fichiers journaux à l'aide de mysqli :: $ error and error_log ()?

M66 2025-07-01

Comment enregistrer les erreurs de base de données dans les fichiers journaux à l'aide de mysqli :: $ error and error_log ()?

La gestion des erreurs de base de données est une partie inévitable du développement d'applications PHP. Afin de mieux résoudre et déboguer les problèmes, il est très nécessaire d'enregistrer les erreurs de base de données en temps opportun. L'extension MySQLI dans PHP fournit une erreur de propriété très pratique MySQLI :: $ qui vous permet d'obtenir le dernier message d'erreur dans la connexion de la base de données. Combinée à la fonction Error_Log () intégrée de PHP, les informations d'erreur peuvent être enregistrées dans les fichiers journaux, aidant les développeurs à suivre les problèmes dans les environnements de production.

Cet article présentera comment utiliser MySQLI :: $ error and error_log () pour enregistrer les informations d'erreur dans la base de données MySQL et enregistrer le connexion d'erreur dans le fichier spécifié pour s'assurer que les développeurs peuvent découvrir et résoudre le problème en temps opportun.

1. Obtenez un message d'erreur MySQL

Lors de la connexion à une base de données MySQL à l'aide de l'extension MySQLI , le message d'erreur est fourni via la propriété MySQLI :: $ Erreur lorsque une erreur d'exécution SQL se produit. Cette propriété renvoie le message d'erreur de l'opération de base de données précédente (telle que la requête, la mise à jour, l'insertion, etc.). Il convient de noter que MySQLI :: $ ERROR renvoie le message d'erreur de l'opération la plus récente, et s'il n'y a pas d'erreur, il renverra une chaîne vide.

 <span><span><span class="hljs-meta">&lt;?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">"root"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"test_db"</span></span><span>);

</span><span><span class="hljs-comment">// Vérifiez si la connexion réussit</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;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>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Exécuter une erreur délibérée SQL Requête</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM non_existing_table"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</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-comment">// Message d&#39;erreur d&#39;obtention et de sortie</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"message d&#39;erreur: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans le code ci-dessus, lors de l'interrogation pour une table qui n'existe pas, $ mysqli-> L'erreur renvoie le message d'erreur MySQL, tel que "Table 'test_db.non_existing_table" n'existe pas ".

2. Utilisez Error_Log () pour enregistrer les erreurs dans le fichier journal

La fonction error_log () est un outil très pratique fourni par PHP pour rédiger des informations d'erreur dans un fichier journal ou l'envoyer à un gestionnaire de journaux d'erreur spécifié. En combinant MySQLI :: $ ERROR et ERROR_LOG () , nous pouvons enregistrer les erreurs de base de données dans un fichier journal pour le dépannage et l'analyse futurs.

L'utilisation de base de la fonction error_log () est:

 <span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$message</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$message_type</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$destination</span></span><span> = ?, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$extra_headers</span></span><span> = ?)
</span></span>
  • $ Message : le message d'erreur à enregistrer.

  • $ message_type : type de journal d'erreur. 0 Indique le fichier journal d'erreur enregistré en PHP, 1 indique l'envoi de l'e-mail et 2 indique l'envoi d'un fichier.

  • $ Destination : Si $ message_type est 1 ou 2, spécifiez l'adresse ou le chemin du fichier journal vers le courrier récepteur.

Voici un exemple montrant comment rédiger des informations d'erreur dans mysqli :: $ Erreur dans un fichier journal:

 <span><span><span class="hljs-meta">&lt;?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">"root"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"test_db"</span></span><span>);

</span><span><span class="hljs-comment">// Vérifiez si la connexion réussit</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;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>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Exécuter une erreur délibérée SQL Requête</span></span><span>
</span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM non_existing_table"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-comment">// 如果Requête失败,Les erreurs de journal dans le fichier journal</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-variable">$error_message</span></span><span> = </span><span><span class="hljs-string">"MySQL erreur: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | Requête: "</span></span><span> . </span><span><span class="hljs-variable">$query</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$error_message</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_error.log"</span></span><span>);
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans ce code, lorsqu'une erreur de requête SQL se produit, le message d'erreur de MySQLI :: $ Erreur est enregistré dans le fichier /var/log/php_error.log avec l'instruction SQL Query. Le premier paramètre d' erreur_log () est un message d'erreur, et le deuxième paramètre est défini sur 3 , indiquant que l'erreur est écrite dans le fichier journal spécifié.

3. Autorisations du fichier journal

Pour s'assurer que PHP peut écrire des erreurs dans le fichier journal, le fichier journal doit avoir des autorisations d'écriture appropriées. Prenant l'exemple de Linux, assurez-vous que le répertoire et le fichier du fichier journal lui-même sont écrits au processus PHP:

 <span><span>sudo </span><span><span class="hljs-built_in">chmod</span></span><span> 777 /var/log/php_error.log
</span></span>

Alternativement, si vous ne souhaitez pas définir des autorisations globales en écriture, vous pouvez également donner aux processus PHP d'écriture des autorisations en ajustant l'utilisateur et le groupe d'utilisateurs auquel appartient le fichier:

 <span><span>sudo </span><span><span class="hljs-built_in">chown</span></span><span> www-data:www-data /var/log/php_error.log
</span></span>

4. Optimiser la journalisation

Bien que les erreurs de journalisation des fichiers journaux soient très utiles, vous pouvez optimiser davantage la façon dont les journaux sont enregistrés. Voici quelques suggestions d'optimisation:

4.1. Ajouter un horodatage

L'ajout d'horodatage au journal d'erreur facilite le suivi lorsqu'une erreur se produit.

 <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-variable">$error_message</span></span><span> = </span><span><span class="hljs-string">"["</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>) . </span><span><span class="hljs-string">"] MySQL erreur: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | Requête: "</span></span><span> . </span><span><span class="hljs-variable">$query</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$error_message</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_error.log"</span></span><span>);
}
</span></span>

4.2. Enregistrer les informations IP et les utilisateurs du client

Si votre application est un système multi-utilisateurs, l'enregistrement de l'adresse IP du client et l'ID de l'utilisateur actuel seront très utiles pour positionner le problème.

 <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-variable">$error_message</span></span><span> = </span><span><span class="hljs-string">"["</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>) . </span><span><span class="hljs-string">"] IP: "</span></span><span> . </span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REMOTE_ADDR'</span></span><span>] . </span><span><span class="hljs-string">" utilisateurID: "</span></span><span> . </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user_id'</span></span><span>] . </span><span><span class="hljs-string">" MySQL erreur: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | Requête: "</span></span><span> . </span><span><span class="hljs-variable">$query</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-variable">$error_message</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_error.log"</span></span><span>);
}
</span></span>

4.3. Limiter la journalisation des erreurs

Si vos fichiers journaux sont devenus très volumineux, considérez la journalisation uniquement des types d'erreurs spécifiques ou utilisez un outil de rotation de journal tel que Logrotate pour gérer les fichiers journaux.

Résumer

En combinant MySQLI :: $ ERROR et ERROR_LOG () , nous pouvons enregistrer efficacement les erreurs de base de données pour enregistrer les fichiers. Cela aide non seulement à localiser rapidement les problèmes pendant le processus de développement, mais aide également les développeurs à détecter les erreurs potentielles de la base de données en temps opportun dans l'environnement de production. En utilisant rationnellement les horodatages, les informations de l'utilisateur et l'IP client, la traçabilité et la praticité du journal peuvent être encore améliorées.

N'oubliez pas de vous assurer que les autorisations des fichiers journaux d'erreur sont correctement définies lors du déploiement dans un environnement de production pour éviter les risques de sécurité.

  • Étiquettes associées:

    mysqli