Подавление предупреждений 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;
}

Спасибо за помощь, и я надеюсь, что это поможет кому-то еще! ^^

Ответы на вопрос(1)

Ваш ответ на вопрос