Suprimindo avisos de DOP
Estou tentando exibir um status do servidor, com base no fato de o banco de dados poder ser conectado ou não. Com a velha escolamysql_connect()
emysqli_connect()
foi fácil. Estou tentando me manter moderno, por isso estou usando o DOP, mas não consigo descobrir como suprimir o aviso padrão. Pelo que posso dizer, você precisa usar ogetMessage()
função para imprimir o aviso DOP, mas não o estou usando.
Aqui está o meu código:
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 }
Todas as variáveis de conexão são fornecidas e corretas, exceto as$dbhost
, que é intencionalmente quebrado para testar isso. Agora, ele produz os resultados desejados, mas também imprime uma mensagem de aviso:
Aviso: PDO :: __ construct (): php_network_getaddresses: getaddrinfo falhou: nenhum host é conhecido. noC: \ xampp \ htdocs \ cd \ inclui \ dbconnect.php conectados10
Se eu corrigir o$dbhost
variável, ele funciona bem, então eu sei que o problema não é com a declaração DOP sendo utilizável.
Alguma idéia do que estou perdendo?
Solução
Eu usei uma variação do que foi fornecido por 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;
}
Obrigado pela ajuda e espero que isso ajude outra pessoa! ^^