2010-12-03 3 views
0

이 궁금하네요,하지만 내가 원하지 않는 모든 예외를 잡는다.캐치 젠드 PDO 예외

try { 
    $application->bootstrap()->run(); 
} catch (Exception $e) { 
    print_r($e); 
} 

나는 pdo 예외가 발생하여 application.ini에서 암호를 표시하는 불쾌한 사례가 발생했습니다!

주목할 가치가있는 점은 PDOException을 시도한 것입니다.

내 DB는 내가 로컬 잘못된 암호를 넣어 응용 프로그램을 실행하는 경우, 내가 빈 페이지도와 볼, 1 참조하지 않는 것이

try { 
     $db = $this->getPluginResource('db')->getDbAdapter(); 
     Zend_Registry::set('dbAdapter', $db); 
    } catch (Exception $e) { 
     echo 1;exit; 
    } 

참고로 부트 스트랩 실행()에서 설정 에서 오류보고.

답변

1

데이터베이스 코드가있는 곳으로 이동하여 해당 코드를 따라 잡으십시오. Pdo 예외 만 원하면 PdoException 만 잡으십시오. catch (PdoExcetion_OR_What_Its_Name_Is $ e) (화면에 오류 출력을 비활성화하고 로그 파일에 오류를 기록하십시오)

+1

필자는 이와 관련하여 시도한 것을 반영하여 내 게시물을 업데이트했습니다. – azz0r

+0

PdoException에 대한 자세한 내용은 여기 http://php.net/manual/en/class.pdoexception.php – cristian

1

전체 응용 프로그램을 시도하고 잡는 것이 이상하게 보입니다. 오류보고를 비활성화하면 (예 : php.ini에서 display_errors) 탐색되지 않은 예외에서 중요한 정보가 노출되는 것을 막을 수 있습니다.

귀하의 질문에 대답하는 것 외에 :

try { 
    $application->bootstrap()->run(); 
} catch (PDOException $e) { 
    print_r($e); 
} 

은 PDO 예외를 잡을해야합니다.

+0

PDOException은 나에게도 아무 것도 반환하지 않습니다. – azz0r

+0

예외를 throw하도록 PDO :: ATTR_ERRMODE를 설정 했습니까? (http://www.php.net/manual/en/pdo.setattribute.php) – ViNce

2

내가 제대로 질문을 이해한다면, 당신이 연결 예외

DB를 당신을 잡으려고 노력하는 뜻이 아래에 다음 줄만큼 쉬운 것입니다 :

try { 
    $db = Zend_Db::factory('Pdo_Mysql', $parameters); 
    $db->getConnection(); 
} catch (Zend_Db_Adapter_Exception $e) { 
    // perhaps a failed login credential, or perhaps the RDBMS is not running 
} catch (Zend_Exception $e) { 
    // perhaps factory() failed to load the specified Adapter class 
} 

기본적으로 getConnection 기능에 노력하고있다 매개 변수를 사용하여 db에 연결하십시오. 실패한 경우 Zend_Db_Adapter_Exception을 던지고 성공적으로 연결하면 마찬가지로 PDO object

을 반환합니다. 이 패턴을 사용하면 Zend_Db 예외를 catch하거나 PDO_Exceptions 컨트롤러 클래스 또는 모델에서 이러한 오류가 발생하지만 전체 응용 프로그램은 발생하지 않습니다.

+0

이것은 불행히도 내 부트 스트랩 실행에서, 나는 $ db = $ this-> getPluginResource ('db')와 비슷하다. > getDbAdapter(); zend db에 대한 호출이 없기 때문에 경험을 커스터마이징하여 주위를 둘러 볼 수 있습니다. – azz0r