2013-06-28 10 views
2

나는 PHP를 배우고 있고 질문이있다.PDO 오류가 Apache의 오류 로그에 나타 납니까?

다음 코드를 사용하여 데이터베이스에 연결하면 가능한 오류가 Apache의 오류 로그에 표시됩니까?

$con = new PDO('mysql:host='.$h.';dbname='.$dbn.';charset=utf8', $u, $p); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); 
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 

표시되는 경우 시도 및 캐치를 사용하는 이유는 무엇입니까?

감사합니다.

답변

3

훌륭한 질문입니다.
대부분의 PHP 사용자는 예외를 이해하지 못하고 오류보고와 관련이 있으며 완전히 오용한다고 생각합니다. 정답은 다소 단순하지만 :

가능한 오류는 Apache의 오류 로그에 나타납니다.

예, 오류를 기록하도록 PHP에 지시하면 가능합니다. log_errors ini 설정이 이에 대한 책임이 있습니다.

표시되는 경우 시도 및 캐치를 사용하는 이유는 무엇입니까?

가장 흥미로운 질문입니다.
오류 메시지을 처리하려면 시도해보십시오.을 사용하면 안됩니다.
이 메커니즘은 오류을 처리하는 데 사용됩니다. 오류 메시지가 아닙니다. 근본적인 차이가 있습니다 만, 대다수의 PHP 사용자가 오해하고 있습니다.

오류 메시지을 처리하려면 PHP에 오류를 기록하는 것이 필요합니다.
오류 자체을 처리하려고하는 경우 캐치가 필수적입니다.

오류 처리는 무엇입니까? 당신이 오류 로깅 옆에 오류가 발생하는 경우에해야 할
아무것도 :

은 우리가 오류

를 처리 한 후 예외를 rethrowing하는

try { 
    $dbh->beginTransaction(); 
    // some SQL stuff 
} catch (Exception $e) { 
    $dbh->rollback(); 
    throw $e; 
} 

참고 트랜잭션을 롤백 중요하지 않은 코드 블록에 오류가 발생합니다.

try { 
    some_non_critical_function(); 
} catch (Exception $e) { 
    log_error($e->getMessage().$e->getTrace()); 
} 

여기에 수동으로 오류 메시지를 기록해야하지만 나머지 코드는 실행시켜야합니다.

등등.

관련 문제