2015-01-29 1 views
0

의 경우 구성 :PDO 내가 PDO 연결 기능의이 종류를 사용하고 실패

class MyPDO extends PDO{ 

    const DB_HOST='localhost'; 
    const DB_PORT='3306'; 
    const DB_NAME='testdb'; 
    const DB_USER='root'; 
    const DB_PASS='root'; 

    public function __construct($options=null){ 
     parent::__construct('mysql:host='.MyPDO::DB_HOST.';port='.MyPDO::DB_PORT.';dbname='.MyPDO::DB_NAME,MyPDO::DB_USER,MyPDO::DB_PASS,$options); 
    } 

    public function query($query){ //secured query with prepare and execute 
     $args = func_get_args(); 
     array_shift($args); //first element is not an argument but the query itself, should removed 

     $reponse = parent::prepare($query); 
     $reponse->execute($args); 
     return $reponse; 

    } 

} 

이제 연결 및 쿼리가 잘 작동하고 모든 것이 매우 중요하지만, 경우에 MySQL 서버 스크립트 아래의 경우 전 이 연결 기능을 사용하면 작업이 중지됩니다. 대신 mysql 서버가 응답하지 않거나 mysql 설정이 잘못 설정된 경우 일부 메시지를 반환하고 싶습니다.

내가

if(new MyPDO===false){echo "The database is down currently. Please try again later."} 

같은 일을 시도했습니다하지만 그건 작동하지 않습니다. 제발 도와주세요. 내가 필요로하는 것은 mysql 연결이 전체 스크립트를 깨뜨리고 빈 페이지 (현재와 같이)를 보여주는 대신 사용할 수없는 경우에 메시지를 표시하는 것입니다.

답변

1

작동합니다 당신의 변수가 PDO의 경우

if($yourpdovar instanceof PDO) { 
    //succeeded message. 
}else{ 
    //error message 
} 

이 코드 검사를 변하기 쉬운. 간단하며 코드의 모든 부분에 넣을 수 있습니다.

+0

코드 끝에서 연결을 닫아야합니까? 예를 들어 atm 어디서나 db connection이 필요합니다. $ db = new MyPDO; 일부 코드 및 쿼리 등, 그리고 $ db = null보다; 그래서 모든 연결을 열어 두지 마십시오. – EvilNabster

+0

코드 끝에서 $ db = null을 사용하지 마십시오. 모든 것이 훌륭하게 작동합니다. – EvilNabster

-1

PHP PDO documentation에서.

<?php 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
    foreach($dbh->query('SELECT * from FOO') as $row) { 
     print_r($row); 
    } 
    $dbh = null; 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

원하는 것을 수행하십시오. 페이지 렌더링, 오류 표시, 리디렉션 등.

try{ 
    //your pdo construction 
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
}catch(PDOException $e){ 
    echo "Error"; // you could also add $e->getMessage(); to display a message why your try catch returned false 
} 

또는 당신은 같은 것을 할 수있는 : 당신의 PDO를 구성 할 때 부모 클래스의 시도 캐치를 사용

+2

코드 예제뿐 아니라 대답에 대한 설명도 포함시켜야합니다. – Mark

+0

꽤 분명해 보입니다. – Halfstop

+1

@gnarly 당신에게 그렇게 보일지 모르지만, 모든 답이 OP에 대한 설명뿐만 아니라 앞으로의 방문자들에게도 잘 설명되어 있는지 확인해야합니다. –