Die Eigenschaft $ connect_error ist ein wichtiges Debugging -Tool, wenn die MySQLI -Erweiterung von PHP für Datenbankverbindungen verwendet wird. Wenn die Verbindung zur Datenbank fehlschlägt, sollte eine Fehlermeldung zurückgegeben werden. Viele Entwickler stellen jedoch fest, dass beim Debuggen von Datenbankverbindungsproblemen: Mysqli :: $ connect_error einen zurückgibt. Dies ist verwirrend und der schnellen Positionierung des Problems nicht förderlich. In diesem Artikel werden die Gründe ausführlich analysiert, die dieses Phänomen verursachen und entsprechende Lösungen liefern.
Die grundlegende Möglichkeit zur Verbindung zu einer MySQL-Datenbank unter Verwendung einer objektorientierten Methode in PHP ist wie folgt:
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
Wenn die Verbindung ausfällt, sollte $ connect_error normalerweise eine Zeichenfolge enthalten, die den Fehler beschreibt. Manchmal gibt es jedoch eine leere Zeichenfolge zurück.
Die Standardfehlerberichterstattung von PHP kann einige Warnungen oder Eingabeaufforderungen blockieren, wodurch Connect_error nicht spezifischen Inhalte abgerufen wird.
Lösung:
Stellen Sie sicher, dass Sie die Fehlerberichterstattung oben im Skript aktivieren:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Auf diese Weise können Sie explizitere Fehlerinformationen erhalten, während Sie sicherstellen, dass MySQLI sinnvolle Fehlerbeschreibungen zurückgibt, wenn die Verbindung fehlschlägt.
Wenn PHP die MySQLI -Erweiterung nicht korrekt lädt, führt die neue MySQLI (...) den Verbindungsvorgang nicht aus, und natürlich gibt es keine Fehlermeldung.
Fehlerbehebung Methode:
phpinfo();
Oder rennen:
<?php
if (!extension_loaded('mysqli')) {
die("mysqli Erweiterung nicht aktiviert");
}
?>
Wenn Sie nicht aktiviert sind, können Sie in Php.ini hinzufügen oder in der Lage sind:
extension=mysqli
Starten Sie den Server neu und testen Sie es erneut.
Wenn Sie neue MySQLI () nennen, ohne Parameter zu übergeben:
$mysqli = new mysqli();
Dies wirft keinen Fehler aus, gibt jedoch ein leeres Verbindungsobjekt zurück, und $ connect_error gibt zu diesem Zeitpunkt keinen Fehler zurück.
Problemumgehung: Stellen Sie sicher, dass die richtigen Parameter bereitgestellt werden.
Einige Konfigurationsfehler (z. B. fehlgeschlagene Hostname -Auflösung) führen möglicherweise nicht sofort dazu, dass der Connect_error einen Fehler zurückgibt, sondern das Connect_errno überprüfen muss, um festzustellen, ob ein Fehler vorliegt.
$mysqli = new mysqli("wronghost", "user", "pass", "db");
if ($mysqli->connect_errno) {
echo "Verbindungsfehlercode: " . $mysqli->connect_errno;
echo "Fehlermeldung: " . $mysqli->connect_error;
}
In einigen extremen Fällen ist Connect_error leer, aber Connect_errno ist nicht 0, was als Hilfsurteil verwendet werden kann.
Manchmal können die Einstellungsfehler für Zeichen oder Socket auch einen Verbindungsfehler verursachen, es wird jedoch keine Fehlermeldung zurückgegeben.
Beispiel:
$mysqli = new mysqli("localhost", "user", "pass", "db", null, "/wrong/socket");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
Es wird empfohlen, die Verbindungseinstellungen zu vereinfachen und Probleme zu beheben.
mysqli_report(MYSQLI_REPORT_ALL);
Diese Einstellung erzwingt MySQLI, Ausnahmen zu veröffentlichen und die Quelle des Fehlers klarer zu erkennen.
Ab PHP 8 ermöglicht MySQLI standardmäßig den Ausnahmemodus. Wenn Sie eine ältere Version von PHP verwenden, können Sie sie manuell aktivieren:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Verwendung mit Try-Catch:
try {
$mysqli = new mysqli("localhost", "user", "pass", "db");
} catch (mysqli_sql_exception $e) {
echo "Verbindung ist fehlgeschlagen: " . $e->getMessage();
}
Während des Debuggens können Sie versuchen, die Parameter der falschen Verbindung, wie den falschen Benutzernamen oder den Hostnamen, absichtlich zu verwenden, um zu testen, ob $ connect_error gültig ist.
$mysqli = new mysqli("gitbox.net", "wronguser", "wrongpass", "testdb");
if ($mysqli->connect_error) {
echo "Verbindung ist fehlgeschlagen: " . $mysqli->connect_error;
} else {
echo "Verbindung erfolgreich";
}
Wenn die leere Zeichenfolge noch zurückgegeben wird, kann sich das Problem in der PHP -Umgebung oder der Verlängerung beladen.