Datenbankverbindungsfehler sind ein häufiges, aber Kopfschmerz induzierender Problem bei der täglichen PHP-Entwicklung. Insbesondere bei Verwendung von MySQLI -Erweiterungen sind Fehlermeldungen häufig verschwommen, und es ist schwierig, die Quelle des Problems schnell zu finden. Um die Debugging -Effizienz zu verbessern, sind die beiden Tools MySQLI :: $ Errno und MySQLi_Report () besonders wichtig. In diesem Artikel wird ihre Funktionen und die Nutzung ausführlich eingeführt, damit Entwickler Datenbankverbindungsfehler schnell identifizieren und beheben können.
MySQLI :: $ errno ist eine Eigenschaft in der mySQLi-objektorientierten Schnittstelle, die den Fehlercode zurückgibt, der durch die neueste Datenbankoperation generiert wird. Wenn es keinen Fehler gibt, beträgt der Rückgabewert 0. Durch die Beurteilung dieses Fehlercode können Entwickler den Fehlertyp klarer kennen, z.
$mysqli = new mysqli("localhost", "user", "wrong_password", "database");
if ($mysqli->connect_errno) {
echo "Verbindung ist fehlgeschlagen,Fehlercode: " . $mysqli->connect_errno . "\n";
echo "Fehlermeldung: " . $mysqli->connect_error . "\n";
// 可根据Fehlercode做精细化处理
if ($mysqli->connect_errno === 1045) {
echo "Hinweis:Bitte überprüfen Sie, ob der Datenbank -Benutzername oder das Passwort korrekt ist。";
}
}
Wenn im obigen Beispiel das Kennwort falsch ist, wird ein Fehlercode 1045 zurückgegeben, der angibt, dass die Authentifizierung fehlgeschlagen ist. Durch die Beurteilung dieses Fehlercode können wir den Benutzer oder Entwickler auffordern, ihn zu korrigieren.
MySQLI_Report () ist eine Konfigurationsfunktion, die das Fehlerberichterstattungsverhalten von MySQLI -Erweiterungen festlegt. Standardmäßig geben MySQLI -Fehler nur boolesche oder Nullwerte zurück, und Entwickler müssen jeden Schritt manuell überprüfen. Nach dem Einschalten der Fehlerberichterstattung wird MySQLI eine Warnung oder Ausnahme auswirken und den Debugging -Prozess vereinfachen.
MySQLI_Report_off : Schalten Sie alle Fehlerberichte aus (Standard).
MySQLi_Report_error : Melden Sie einen Fehler.
MySQLi_Report_Strict : Wirt einen Fehler in Ausnahmebetriebe (empfohlen).
Mysqli_report_all : Alle Fehler, einschließlich Syntaxwarnungen usw., melden.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "user", "wrong_password", "database");
// Führen Sie eine falsche Anfrage aus
$mysqli->query("SELECT * FROM Eine nicht existierende Tabelle");
} catch (mysqli_sql_exception $e) {
echo "Es ist ein Fehler aufgetreten: " . $e->getMessage() . "\n";
echo "Fehlercode: " . $e->getCode() . "\n";
// Sie können Fehler weiter protokollieren oder Fehler melden
file_put_contents("/var/log/db_errors.log", $e->getMessage(), FILE_APPEND);
}
Diese Schreibmethode vereinfacht nicht nur die Codelogik, sondern findet auch schnell den Ort, an dem der Fehler auftritt, und sorgt für die Verwendung in der Entwicklungsphase sehr geeignet.
In den tatsächlichen Projekten wird empfohlen, einen strengen Fehlerberichterstattungsmechanismus in der Entwicklungs- oder Testumgebung zu aktivieren (unter Verwendung von MySQLI_Report () ) und gleichzeitig MySQLi :: $ errno kombinieren, um detailliertere Urteile zu fällen, wenn Sie Aussagen fangen.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "user", "password", "database");
echo "Die Datenbankverbindung ist erfolgreich";
} catch (mysqli_sql_exception $e) {
echo "数据库Verbindung ist fehlgeschlagen,Fehlermeldung: " . $e->getMessage();
// 如果需要追踪具体Fehlercode
if (strpos($e->getMessage(), '1049') !== false) {
echo "\nHinweis:Die Datenbank existiert nicht,Bitte überprüfen Sie den Datenbanknamen。";
} elseif (strpos($e->getMessage(), '1045') !== false) {
echo "\nHinweis:Falscher Benutzername oder Passwort,Bitte überprüfen Sie die Zertifizierungsinformationen。";
}
}
Sie können auch benutzerdefinierte Protokollierungssysteme kombinieren, um Fehlermeldungen in lokalen oder Remote -Protokolldiensten zu protokollieren, z. B.:
$logData = date('Y-m-d H:i:s') . " Datenbankfehler: " . $e->getMessage() . "\n";
file_put_contents("https://m66.net/logs/db_errors.log", $logData, FILE_APPEND);
Hinweis: Der Name der URL -Domänen im obigen Beispiel wurde durch m66.net ersetzt. Bitte bearbeiten Sie die Remote -Protokollempfangslogik gemäß der tatsächlichen Situation.
Durch die rationalere Verwendung von MySQLI :: $ errno und mySQLI_Report () kann die PHP -Debugging -Effizienz erheblich verbessert werden, und es können Fehler gefunden und so bald wie möglich gefunden werden, wenn ein Problem mit der Datenbankverbindung vorliegt. Es wird empfohlen, den strengen Modus ( MySQLI_Report_strict ) in der Entwicklungsumgebung immer zu aktivieren und mit Ausnahmebehandlungsmechanismen zu kooperieren, um sichere Herabstufungen oder Protokollierung in Produktionsumgebungen durchzuführen.
Debugging ist nicht das Ziel, Stabilität ist das Ziel. Wenn Sie diese beiden Geräte gut nutzen, wird Ihre PHP -Datenbankvorgänge kontrollierbar, messbar und aufrechterhalten.