오류 처리와 PHP PDO 오류
- PDO :: ERRMODE_SILENT
이것은 디폴트 모드이다. PDO는 단순히 문 및 데이터베이스 개체를 확인하기 위해 PDO :: errorCode를 () 및 PDO :: ERRORINFO () 메소드를 사용하여 오류 코드를 설정합니다. 오류가 호출 문의 객체가 생성에 의한 경우, 해당 객체 PDOStatement :: errorCode를 () 또는 PDOStatement :: ERRORINFO () 메서드를 호출 할 수 있습니다. 오류가 데이터베이스 오브젝트에 대한 호출에서 결과 경우, 데이터베이스 오브젝트에 그 메소드를 호출합니다.
- PDO :: ERRMODE_WARNING
에러 코드 부가 설정 이외에, PDO 전통적인 E_WARNING 메시지를 방출한다. 당신은 응용 프로그램의 흐름을 방해하지 않고 발생한 문제보고 싶어, 그래서 디버깅 / 테스트 기간이 설정은 매우 유용합니다.
- PDO :: ERRMODE_EXCEPTION
에러 코드 부가 설정 이외에, PDO는 예외 PDOException 클래스를 발생하고, 에러 코드 및 에러 메시지를 반영하기 위해 그 속성을 설정한다. 예외가 다시 자동으로 트랜잭션을 종료하는 스크립트입니다 발생하는 경우 :이 설정은 잘못된 점 효과적으로 매우 빠르게 잠재적 인 문제 영역 코드를 지적 할 수있는 스크립트를 확대하기 때문에 (기억, 또한 디버깅시 유용 롤).
또 다른 예외 모드를 사용하면 더 명확하게 처리하는 자신의 오류를 구축 할 수 있습니다, 기존의 PHP 스타일의 경고에 비해 매우 유용하고, 각 데이터베이스 호출, 비정상적인 패턴 코드의 반환 값은 자동 모드에 비해 명시 적으로 확인 필수 / 이하 중첩.
PDO 인스턴스를 생성하고 오류 모드를 설정
<?php $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $user = 'dbuser'; $password = 'dbpass'; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } ?>
참고 : 관계없이 여부를 현재 설정 PDO :: ATTR_ERRMODE의 연결이 실패 할 경우, PDO :: __ 구조 ()는 항상 PDOException 예외를 throw합니다. 캐치되지 않는 예외는 치명적이다.
PDO 인스턴스를 생성하고 생성자에서 오류 모드를 설정
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING, 因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。 */ try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } // 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?>
위의 예제가 출력 :
Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note