Ich versuche, einen Serverstatus anzuzeigen, basierend darauf, ob die Datenbank verbunden werden kann oder nicht. Mit der alten Schule mysql_connect()
und mysqli_connect()
war es einfach. Ich versuche, modern zu bleiben, also verwende ich PDO, aber ich kann nicht herausfinden, wie man die Standardwarnung unterdrückt. Von dem, was ich sagen kann, müssen Sie die getMessage()
Funktion dafür verwenden, um die PDO Warnung zu drucken, aber ich benutze es nicht.Unterdrücken von PDO-Warnungen
Hier ist mein Code:
8 $dbstatus = 1;
9 try {
10 $db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname, $dbuser, $dbpasswd);
11 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
12 } catch(PDOException $e) {
13 $dbstatus = 0;
14 }
15 if($dbstatus == 1) {
16 echo '<span style="color: green">DB Up</span>';
17 } else {
18 echo '<span style="color: red">DB Down</span>';
19 exit;
20 }
Alle Anschlussgrößen werden geliefert und richtig, mit Ausnahme der $dbhost
, die dies zu testen absichtlich gebrochen wird. Nun erzeugt er die gewünschten Ergebnisse, ist aber auch eine Warnmeldung zu:
Warnung: PDO :: __ construct(): php_network_getaddresses: getaddrinfo failed: No such Host bekannt ist. in C: \ xampp \ htdocs \ cd \ enthält \ dbconnect.php on line
Wenn ich die $dbhost
Variable korrigieren, es funktioniert gut, so dass ich weiß, dass das Problem nicht mit dem PDO Aussage ist verwendbar.
Irgendwelche Ideen zu was ich vermisse?
Lösung
benutzte ich eine Variation dessen, was von Jeroen geliefert wurde:
if(filter_var(gethostbyname($dbhost), FILTER_VALIDATE_IP)) {
$dbstatus = 1;
try {
$db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname, $dbuser, $dbpasswd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch(PDOException $e) {
$dbstatus = 0;
}
} else {
$dbstatus = 0;
}
if($dbstatus == 1) {
echo '<span style="color: green">DB Up</span>';
} else {
echo '<span style="color: red">DB Down</span>';
exit;
}
Danke für die Hilfe, und ich hoffe, dass dies jemand anderes hilft! ^^
In einem AJAX-Aufruf, der einen JSON zurückgibt, ist die Warnung (scheint nicht zu greifen), meine zwei letzten Arbeitstage nutzlos zu machen. Das saugt –