Aktueller Standort: Startseite> Neueste Artikel> Wie protokolliere ich Datenbankfehler in Protokolldateien mit MySQLI :: $ error und error_log ()?

Wie protokolliere ich Datenbankfehler in Protokolldateien mit MySQLI :: $ error und error_log ()?

M66 2025-07-01

Wie protokolliere ich Datenbankfehler in Protokolldateien mit MySQLI :: $ error und error_log ()?

Die Datenbankfehlerbehandlung ist ein unvermeidlicher Bestandteil der Entwicklung von PHP -Anwendungen. Um Probleme besser zu beheben und zu debuggen, ist es sehr notwendig, Datenbankfehler rechtzeitig aufzuzeichnen. Die MySQLI -Erweiterung in PHP bietet eine sehr praktische Eigenschaft MySQLI :: $ ERROR , mit der Sie die letzte Fehlermeldung in der Datenbankverbindung abrufen können. In Kombination mit der integrierten Funktion von PHP () können Fehlerinformationen in Protokolldateien aufgezeichnet werden, wodurch Entwickler Probleme in Produktionsumgebungen verfolgen können.

In diesem Artikel wird vorgestellt, wie MySQLI :: $ error und error_log () verwendet werden, um Fehlerinformationen in der MySQL -Datenbank aufzunehmen und das Fehlerprotokoll in der angegebenen Datei zu speichern, um sicherzustellen, dass Entwickler das Problem rechtzeitig entdecken und beheben können.

1. Holen Sie sich MySQL -Fehlermeldung

Wenn Sie eine Verbindung zu einer MySQL -Datenbank mit der MySQLI -Erweiterung herstellen, wird die Fehlermeldung über die MySQLI :: $ -IR -IR -Eigenschaft bereitgestellt, wenn ein SQL -Ausführungsfehler auftritt. Diese Eigenschaft gibt die Fehlermeldung der vorherigen Datenbankoperation zurück (z. B. Abfrage, Aktualisierung, Einfügen usw.). Es ist zu beachten, dass MySQLI :: $ ERROR nur die Fehlermeldung der letzten Operation zurückgibt, und wenn es keinen Fehler gibt, gibt es eine leere Zeichenfolge zurück.

 <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">// Überprüfen Sie, ob die Verbindung erfolgreich ist</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">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Einen absichtlichen Fehler ausführen SQL Abfrage</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">// 检查Abfrage是否执行成功</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">// Fehlermeldung abrufen und ausgeben</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fehlermeldung: "</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>

Wenn Sie im obigen Code eine Tabelle abfragen, die nicht vorhanden ist, gibt $ mysqli-> Fehler die MySQL-Fehlermeldung zurück, wie z. B. "Tabelle" test_db.non_existing_table "nicht existiert".

2. Verwenden Sie ERROR_LOG (), um Fehler zu protokollieren, um die Datei zu protokollieren

Die Funktion "ERROR_LOG () ist ein sehr bequemes Tool, das von PHP zum Schreiben von Fehlerinformationen in eine Protokolldatei oder zum Senden an einen angegebenen Fehlerprotokollhandler bereitgestellt wird. Durch Kombination von MySQLI :: $ ERRAGE UND ERROR_LOG () können wir Datenbankfehler in einer Protokolldatei für zukünftige Fehlerbehebung und Analyse aufzeichnen.

Die grundlegende Verwendung der Funktion error_log () lautet:

 <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>
  • $ meldung : Die zu erfasste Fehlermeldung.

  • $ message_type : Fehlerprotokolltyp. 0 gibt die bei PHP aufgezeichnete Fehlerprotokolldatei an, 1 das Senden der E -Mail an und 2 zeigt das Senden einer Datei an.

  • $ Ziel : Wenn $ message_type 1 oder 2 ist, geben Sie die Adresse oder Protokolldateipfad zum empfangenden E -Mail an.

Hier ist ein Beispiel, das zeigt, wie Fehlerinformationen in MySQLI :: $ ERROR in eine Protokolldatei schreiben:

 <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">// Überprüfen Sie, ob die Verbindung erfolgreich ist</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">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Einen absichtlichen Fehler ausführen SQL Abfrage</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">// 如果Abfrage失败,Protokollefehler zur Protokolldatei protokollieren</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 Fehler: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | Abfrage: "</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>

Wenn in diesem Code ein SQL -Abfragefehler auftritt, wird die Fehlermeldung von MySQLI :: $ ERROR zusammen mit der SQL -Abfrageanweisung in der Datei /var/log/php_error.log aufgezeichnet. Der erste Parameter von ERROR_LOG () ist eine Fehlermeldung, und der zweite Parameter wird auf 3 gesetzt, was angibt, dass der Fehler in die angegebene Protokolldatei geschrieben wird.

3.. Protokolldateiberechtigungen

Um sicherzustellen, dass PHP Fehler in die Protokolldatei schreiben kann, muss die Protokolldatei entsprechende Schreibberechtigungen haben. Stellen Sie als Beispiel sicher, dass das Verzeichnis und die Datei der Protokolldatei selbst in den PHP -Prozess beschreibbar sind:

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

Wenn Sie nicht globale schriftliche Berechtigungen festlegen möchten, können Sie auch PHP -Prozesse Schreibberechtigungen geben, indem Sie die Benutzer- und Benutzergruppe anpassen, zu der die Datei gehört:

 <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. Die Protokollierung optimieren

Während die Protokollierungsfehler bei Protokolldateien sehr nützlich sind, möchten Sie möglicherweise weiter optimieren, wie Protokolle aufgezeichnet werden. Hier sind einige Optimierungsvorschläge:

4.1. Fügen Sie einen Zeitstempel hinzu

Das Hinzufügen von Zeitstempeln zum Fehlerprotokoll erleichtert die Verfolgung, wenn ein Fehler auftritt.

 <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 Fehler: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | Abfrage: "</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. Notieren Sie Client IP- und Benutzerinformationen

Wenn Ihre Anwendung ein Multi-User-System ist, ist die Aufzeichnung der IP-Adresse des Clients und die aktuelle Benutzer-ID sehr hilfreich bei der Positionierung des Problems.

 <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">" BenutzerID: "</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 Fehler: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">" | Abfrage: "</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. Begrenzung der Fehlerprotokollierung

Wenn Ihre Protokolldateien sehr groß geworden sind, sollten Sie nur bestimmte Arten von Fehlern protokollieren oder mit einem Protokollrotationstool wie Lehbrotat zum Verwalten von Protokolldateien verwenden.

Zusammenfassen

Durch Kombinieren von MySQLI :: $ error und error_log () können wir Datenbankfehler effizient auf Protokolldateien protokollieren. Dies hilft nicht nur dabei, Probleme während des Entwicklungsprozesses schnell zu lokalisieren, sondern hilft Entwicklern auch dabei, potenzielle Datenbankfehler in der Produktionsumgebung rechtzeitig zu erkennen. Durch die rationalere Verwendung von Zeitstempeln, Benutzerinformationen und Client -IP können die Rückverfolgbarkeit und Praktikabilität des Protokolls weiter verbessert werden.

Denken Sie daran, sicherzustellen, dass die Berechtigungen der Fehlerprotokolldateien bei der Bereitstellung in einer Produktionsumgebung ordnungsgemäß festgelegt werden, um Sicherheitsrisiken zu vermeiden.