Подавление предупреждений PDO
Я пытаюсь отобразить состояние сервера, основываясь на том, может ли база данных быть подключена или нет. Со старой школойmysql_connect()
а такжеmysqli_connect()
это было легко. Я пытаюсь оставаться современным, поэтому я использую PDO, но я не могу понять, как подавить предупреждение по умолчанию. Из того, что я могу сказать, вам нужно использоватьgetMessage()
функция для него, чтобы напечатать предупреждение PDO, но я не использую его.
Вот мой код:
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 }
Все переменные соединения поставляются и корректны, кроме$dbhost
, который намеренно сломан, чтобы проверить это. Теперь он дает желаемые результаты, но также выводит предупреждающее сообщение:
Предупреждение: PDO :: __ construct (): php_network_getaddresses: getaddrinfo не удалось: такой хост не известен. вC: \ XAMPP \ HTDOCS \ CD \ включает \ dbconnect.php онлайн10
Если я исправлю$dbhost
переменная, она работает нормально, поэтому я знаю, что проблема не в том, что оператор PDO можно использовать.
Есть идеи о том, что мне не хватает?
Решение
Я использовал вариант того, что было предоставлено Jeroen:
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;
}
Спасибо за помощь, и я надеюсь, что это поможет кому-то еще! ^^