데이터베이스를 연결할 수 있는지 여부에 따라 서버 상태를 표시하려고합니다. 예전 학교 mysql_connect()
및 mysqli_connect()
의 경우 쉽습니다. 현대적인 상태로 유지하려고하므로 PDO를 사용하고 있지만 기본 경고를 표시하지 않는 방법을 파악할 수는 없습니다. 내가 알 수 있듯이 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 :: __ 구조() : php_network_getaddresses : 실패한다 getaddrinfo : 그런 호스트는 알 수 없습니다. C에서 : \ XAMPP \ htdocs를 \ CD를 \ 줄에 dbconnect.php \를 포함 10
나는 $dbhost
변수를 수정하면 잘 작동, 그래서 문제가 PDO하지 알고 진술을 사용할 수 있습니다.
실종에 대한 아이디어가 있습니까?
솔루션
나는 제론에 의해 공급 된 것의 변형 사용 :
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;
}
이 도움을 주셔서 감사하고 나는이 다른 사람이 도움이되기를 바랍니다! ^^
json을 반환하는 아약스 호출 내에서 경고 (잡히지 않는 것처럼 보임)는 내 마지막 두 일을 쓸모 없게 만듭니다. 이것은 –