PHP--PDO 오류 및 오류 처리

伊谢尔伦
풀어 주다: 2016-11-22 09:32:17
원래의
969명이 탐색했습니다.

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는 SQL-92 SQLSTATE를 사용하여 오류 코드 문자열을 정규화합니다. 다양한 PDO 드라이버는 기본 코드를 적절한 SQLSTATE 코드에 매핑합니다. PDO::errorCode() 메소드는 단일 SQLSTATE 코드를 리턴합니다. 이 오류에 대한 자세한 정보가 필요한 경우 PDO는 SQLSTATE 코드, 특정 드라이버 오류 코드 및 이 드라이버의 오류 문자열이 포함된 배열을 반환하는 PDO::errorInfo() 메서드도 제공합니다.

예제 #1 PDO 인스턴스 생성 및 오류 모드 설정

<?php
    $dsn = &#39;mysql:dbname=testdb;host=127.0.0.1&#39;;
    $user = &#39;dbuser&#39;;
    $password = &#39;dbpass&#39;;
    try {
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo &#39;Connection failed: &#39; . $e->getMessage();
    }
?>
로그인 후 복사

현재 PDO::ATTR_ERRMODE가 설정되어 있는지 여부에 관계없이 연결이 실패하면 PDO::__construct()는 항상 PDOException 예외를 발생시킵니다. 잡히지 않는 예외는 치명적입니다.

예제 #2 PDO 인스턴스를 생성하고 생성자에서 오류 모드를 설정합니다.

<?php
    $dsn = &#39;mysql:dbname=test;host=127.0.0.1&#39;;
    $user = &#39;googleguy&#39;;
    $password = &#39;googleguy&#39;;
    /*
     *使用 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 &#39;Connection failed: &#39; . $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 &#39;test.wrongtable&#39; doesn&#39;t exist in/tmp/pdo_test.php on line 18
로그인 후 복사


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿