Sto tentando di visualizzare uno stato del server, in base al fatto che il database possa essere collegato o meno. Con la vecchia scuola mysql_connect()
e mysqli_connect()
è stato facile. Sto cercando di rimanere moderno, quindi sto usando PDO, ma non riesco a capire come sopprimere l'avviso predefinito. Da quello che posso dire, è necessario utilizzare la funzione getMessage()
per stampare l'avviso PDO, ma non lo sto utilizzando.Soppressione degli avvisi PDO
Ecco il mio codice:
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 }
Tutte le variabili di collegamento sono forniti e corretta, ad eccezione del $dbhost
, che è intenzionalmente rotto per testare questo. Ora, produce i risultati desiderati, ma è stampa anche un messaggio di avviso troppo:
Attenzione: PDO :: __ construct(): php_network_getaddresses: getaddrinfo fallito: No Host sconosciuto. in C: \ xampp \ htdocs \ cd \ include \ dbconnect.php on line
Se ho corretto la variabile $dbhost
, funziona benissimo, quindi so che il problema non è con la DOP dichiarazione essere utilizzabile.
Qualche idea su cosa mi manca?
Soluzione
ho usato una variante di ciò che è stato fornito da 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;
}
Grazie per l'aiuto e spero che questo aiuta a qualcun altro! ^^
All'interno di una chiamata ajax che restituisce un avviso l'avviso (sembra essere inaffidabile) sta rendendo inutili i miei ultimi due giorni di lavoro. Questo fa schifo –