2011-12-01 3 views
0

내 클래스 메서드에서 try/catch 블록을 사용합니다. 예외가 발생하면 오류가 기록됩니다. 하지만 "사용자"에게 데이터베이스 쿼리/실패 등을 알려주고 싶습니다. 문제는 곧 수정되어야합니다. 내 메서드에서 Exception에 die()를 사용할 수는 있지만 DRY가 아닐 수 있습니다. 다시 입력해야하므로 입력 할 수있는 방법에 대한 제안이 필요합니다.글로벌 PHP PDO 처리 오류

예시적인 방법 :

public function login($username, $password) { 
    try { 
     $this->STH = $this->DBH->prepare("SELECT id, baned, activated FROM users WHERE username = ? AND password = ?"); 
     $this->STH->setFetchMode(PDO::FETCH_OBJ); 
     $this->STH->execute(array($username, $password)); 

     if (($row = $this->STH->fetch()) !== false) 
      return $row; 
    } catch (PDOException $e) { 
     //Log $e->getMessage(); 
     die('A database error occoured, we are working on the problem, and it should work in a few...'); 
    } 
} 

답변

1

이 때문에, 다이의 각 인스턴스 (이 경우에 자신을 반복 OK이다)이 고유의 메시지를 전달한다. 당신이 빠른 수정이 필요하면

3

,이 같은 글로벌 예외 핸들러를 설정할 수 있습니다

function pdo_exception_handler($exception) { 
    if ($exception instanceof PDOException) { 
     // do something specific for PDO exceptions 
    } else { 
     // since the normal exception handler won't be called anymore, you 
     // should handle normal exceptions yourself too 
    } 
} 
set_exception_handler('pdo_exception_handler'); 
나는 위의 방법으로,이 동작하지 않습니다
+0

, 아니 결과가 출력되지 않습니다, 나는 않았던 오류가 의도적으로 발생했습니다 .. – John

+0

해당 처리기는 검색되지 않은 예외에 대해서만 호출되므로 코드의 예외를 이미 catch 한 경우 전역 처리기에서이를 catch 할 수 있도록 예외를 다시 throw해야합니다. – rabusmar

+0

어떻게 할 수 있습니까? – John