PDO::ERRMODE_SILENT
이것이 기본 모드입니다. PDO는 단순히 오류 코드를 설정하며 이는 명령문 및 데이터베이스 개체에 대한 PDO::errorCode() 및 PDO::errorInfo() 메서드를 사용하여 확인할 수 있습니다. 명령문 객체 호출로 인해 오류가 발생하는 경우 해당 객체의 PDOStatement::errorCode() 또는 PDOStatement::errorInfo() 메서드를 호출할 수 있습니다. 데이터베이스 개체를 호출하여 오류가 발생한 경우 데이터베이스 개체에 대해 위의 두 메서드를 호출할 수 있습니다.
PDO::ERRMODE_WARNING
오류 코드를 설정하는 것 외에도 PDO는 전통적인 E_WARNING 메시지도 보냅니다. 이 설정은 애플리케이션의 흐름을 방해하지 않고 무엇이 잘못되었는지 확인하려는 경우 디버깅/테스트 중에 유용합니다.
PDO::ERRMODE_EXCEPTION
오류 코드 설정 외에도 PDO는 PDOException 예외 클래스를 발생시키고 해당 속성을 설정하여 오류 코드 및 오류 정보를 반영합니다. 이 설정은 디버깅 중에도 매우 유용합니다. 오류가 발생한 스크립트 지점을 효과적으로 확대하여 코드에서 잠재적인 문제가 있는 영역을 매우 빠르게 찾아낼 수 있기 때문입니다. (기억: 예외로 인해 스크립트가 종료되면 트랜잭션은 자동으로 롤백됩니다.
예외 모드의 또 다른 매우 유용한 점은 기존 PHP 스타일 경고보다 더 명확하게 자체 오류 처리를 구축할 수 있으며 자동 모드보다 적은 코드가 필요하고 각 데이터베이스 호출의 반환 값을 명시적으로 확인한다는 것입니다.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$user = 'dbuser';$password = 'dbpass';try { $dbh = 새 PDO($dsn, $user, $password ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} 잡기 (PDOException $e) { echo '연결 실패: $e->getMessage();}?>
참고: PDO::ATTR_ERRMODE가 현재 설정되어 있는지 여부에 관계없이 PDO::__construct()는 연결이 실패하면 항상 PDOException을 발생시킵니다. 잡히지 않는 예외는 치명적입니다.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* ERRMODE가 설정된 경우에도 생성자 주위에서 try/catch를 사용하면 계속 작동합니다. 경고: 연결이 실패하면 PDO::__construct가 항상 PDOException을 발생시키기 때문입니다. */try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} catch (PDOException $e) { echo '연결 실패: ' $. e->getMessage(); 종료;}//이로 인해 PDO가 E_WARNING을 발생시킵니다. 예외가 아닌 수준 오류(데이터 테이블이 존재하지 않는 경우) $dbh->query("SELECT 잘못된 열 FROM 잘못된 테이블");?>
위 루틴은 다음을 출력합니다:
경고: PDO::query(): SQLSTATE[42S02]: 기본 테이블 또는 뷰를 찾을 수 없음: 1146 테이블 'test.wrongtable'이 18행의/tmp/pdo_test.php에 존재하지 않습니다. 메모 추가 메모 추가