Debugging -Datenbankvorgänge können bei der PHP -Entwicklung kompliziert werden, insbesondere bei der Behandlung mehrerer Datenbankverbindungen in einer Anwendung. Die MySQLI :: Debug -Methode von PHP ist ein weniger erwähntes, aber sehr nützliches Debugging-Tool, das besonders geeignet ist, Datenbankverbindungen zu analysieren, Anweisungen auszuführen und sogar die zugrunde liegenden Netzwerkaktivitäten anzusehen.
In diesem Artikel wird detailliert eingeführt, wie die MySQLI :: Debug -Methode bei der Debugie mehrerer Datenbankverbindungen effektiv verwendet wird, und sie in Kombination mit Beispielcode zu erklären.
MySQLI :: Debug () ist eine statische Methode in der MySQLI -Erweiterung, mit der Debugging -Informationen an die MySQL -Client -Bibliothek gesendet werden, die hauptsächlich im Entwicklungs- und Debugging -Prozess verwendet wird. Diese Funktion gibt nichts zurück, seine Hauptfunktion besteht darin, Debug -Informationen in die von der Client -Bibliothek konfigurierte Debug -Datei zu schreiben.
Um es zum Laufen zu bringen, muss die Debug -Unterstützung in my.cnf oder my.ini (normalerweise über Debug = D: t: t: t: O,/tmp/client.trace im Client -Abschnitt konfiguriert werden) und dann die Protokollierung mithilfe dieser Methode ausgelöst.
mysqli::debug("d:t:o,/tmp/client.trace");
Dadurch werden Debug -Informationen auf /tmp/client.trace geschrieben.
Wenn mehrere Datenbanken mit Ihrer Anwendung verbunden sind, wie z. B. der primären Datenbank und mehreren Read -Replikas, muss das Debugging mehr gezielt sein. Hier sind einige empfohlene Strategien.
Sie können den Datenbankverbindungsprozess zusammenfassen, jeder Verbindung einen Identifikationsnamen hinzufügen und die Quelle im Ausgabeprotokoll unterscheiden.
function connect_to_db($label, $host, $user, $pass, $db) {
mysqli::debug("d:t:o,/tmp/{$label}_trace.log"); // Richten Sie die Debug -Datei für jede Verbindung ein
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Verbindung ist fehlgeschlagen ({$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");
Obwohl MySQLI :: Debugg die zugrunde liegenden Debugging -Informationen ist, kann es einen vollständigen Debugging -Link mit der Protokollausgabe von PHP bilden.
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("Es gab keine Verbindung zu der Replikatendatenbank herzustellen: " . $replica_conn->connect_error);
} else {
error_log("Eine erfolgreiche Verbindung zur Replikatabase herstellen: " . $replica_conn->host_info);
}
Sie können wie http://m66.net/log-viewer verwenden, um eine Protokollobjektoberfläche zu erstellen, um schnell Probleme zu finden.
In einer Entwicklungs- oder Testumgebung möchten Sie möglicherweise nicht jedes Mal MySQLI :: Debugug anrufen. Zu diesem Zeitpunkt können Sie Umgebungsvariablen oder Konfigurationsdateien verwenden, um zu steuern, ob Debugging aktiviert werden soll.
if (getenv("DB_DEBUG") === "true") {
mysqli::debug("d:t:o,/tmp/debug_trace.log");
}
Fügen Sie in die .Env -Datei hinzu:
DB_DEBUG=true
Die Kombination von mySQLi_Report () kann besser Fehler aufnehmen:
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");
Dies wird Ausnahmen anstelle von stillen Fehlern auslösen, sodass Sie Probleme auf der Codeebene leichter verfolgen können.