Verbindung zur Datenbank checken - PHP?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ob Fehler angezeigt werden oder nicht, hängt vom gesetzten error_level ab. Wenn ich den bspw. auf 0 setze:

error_reporting(0);

kann ich nachfolgend so viele Exceptions werfen, wie ich lustig bin, ohne dazu eine Fehlermeldung auf der Webseite zu erhalten (es sei denn, der Server verabschiedet sich irgendwann).

Die möglichen Fehlerstufen kannst du hier nachschlagen. Bedenke, dass genaue Fehlermeldungen auf einem Produktionssystem möglichst vermieden werden sollten. Anwender brauchen nicht mit der internen Technik konfrontiert werden.

Statt eine Exception zu werfen, würde ich allerdings mit boolschen Werten arbeiten, denn die verbrauchen weniger Speicher und sind vollkommen ausreichend. Die genaue Fehlerursache kannst du dir ja trotzdem in ein Log schreiben.

Für die Behandlung des Ausnahmefalls kann man im einfachsten Fall das Skript beenden:

die('There was an internal error. Please come back later.');

oder schöner, auf eine spezielle Fehlerseite weiterleiten.

header('Location: error.html');
exit;
ArduinoGeek 
Fragesteller
 10.05.2022, 12:02

Danke!!

0

Mir fällt zumindest spontan auf, dass ein Anführungszeichen fehlt.

$host = "localhost; < hier.
Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting
ArduinoGeek 
Fragesteller
 09.05.2022, 12:57

In meinem Code steht da ein Server, hab den für gutefrage aber zu localhost geändert. Daran kann’s also nicht liegen, trotzdem danke! :)

0
if ($conn->connect_errno) {
     echo "Verbindungsprobleme " . $conn->connect_error;
    }

Ich geb Verbindungsfehler so aus, breche also nicht mit die() ab.

die exeption läuft in databaseErrorHandling()

was passiert denn da? da wird das irgendwie verworfen bzw läuft ins leere.

ArduinoGeek 
Fragesteller
 09.05.2022, 13:00

Ne, da wird nur ne Mail an mich gesendet und der Fehler in ein LogFile geschrieben. Ich hab auch schon mal probiert, das throw new Exception auszukommentieren und dort dann so was wie die(„Verbindung fehlgeschlagen“) zu schreiben, um wenigstens sehen zu können, dass php merkt, die Verbindung funktioniert nicht, doch da wurde mir das die() auch nicht angezeigt :(. Es muss dementsprechend an dem Connect-> error liegen, oder?

0
SchlickTheFlick  09.05.2022, 20:36
@ArduinoGeek

in

if ($this->connection->connect_error) {
   throw new Exception("Connection to database failed. | " . $this->connection->connect_error);
}

schmeisst du eine exeption.. das heisst ertmal nix wenn diese nicht behandelt wird (logfile, programmabbruch, consolen-ausgabe, etc) und das sehe ich hier nicht, dass das iwie behandelt wird.. mach man anstatt das throw exception ein echo rein.

0