다음을 통해 공유


PDO::errorInfo

PHP 드라이버 다운로드

데이터베이스 핸들에서 최근 작업의 확장된 오류 정보를 검색합니다.

구문

array PDO::errorInfo();  

Return Value

데이터베이스 핸들에서 최근 작업에 대한 오류 정보입니다. 배열은 다음 필드로 구성됩니다.

  • SQLSTATE 오류 코드입니다.

  • 드라이버별 오류 코드입니다.

  • 드라이버별 오류 메시지입니다.

오류가 없거나 SQLSTATE가 설정되지 않은 경우 드라이버 관련 필드는 NULL입니다.

설명

PDO::errorInfo는 데이터베이스에서 직접 수행된 작업에 대한 오류 정보만 검색합니다. PDO::prepare 또는 PDO::query를 사용하여 PDOStatement 인스턴스가 만들어질 때 PDOStatement::errorInfo를 사용합니다.

PDO 지원이 Microsoft Drivers for PHP for SQL Server의 버전 2.0에 추가되었습니다.

예제

이 예제에서는 열 이름의 철자가 잘못되어(City가 아닌 Cityx) 오류가 발생하므로 보고됩니다.

<?php  
$conn = new PDO( "sqlsrv:server=(local) ; Database = AdventureWorks ", "");  
$query = "SELECT * FROM Person.Address where Cityx = 'Essen'";  
  
$conn->query($query);  
print $conn->errorCode();  
echo "\n";  
print_r ($conn->errorInfo());  
?>  

추가 ODBC 메시지

예외가 발생하면 ODBC Driver는 문제를 진단하는 데 도움이 되는 두 개 이상의 오류를 반환할 수 있습니다. 그러나 PDO::errorInfo는 항상 첫 번째 오류만 표시합니다. 관련 버그 신고서에 대한 응답으로 드라이버가 ‘최소한’ 다음 세 필드를 표시해야 함을 나타내도록 PDO::errorInfoPDOStatement::errorInfo가 업데이트되었습니다.

0	SQLSTATE error code (a five characters alphanumeric identifier defined in the ANSI SQL standard).
1	Driver specific error code.
2	Driver specific error message.

5\.9.0부터 PDO::errorInfo의 기본 동작은 추가 ODBC 오류를 표시하는 것입니다(사용 가능한 경우). 예를 들면 다음과 같습니다.

<?php  
try {
    $conn = new PDO("sqlsrv:server=$server;", $uid, $pwd);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SET NOCOUNT ON; USE $database; SELECT 1/0 AS col1");
    $stmt->execute();
} catch (PDOException $e) {
    var_dump($e->errorInfo);
}
?>  

위의 스크립트를 실행하면 예외가 throw되고 출력은 다음과 같습니다.

array(6) {
  [0]=>
  string(5) "01000"
  [1]=>
  int(5701)
  [2]=>
  string(91) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'tempdb'."
  [3]=>
  string(5) "22012"
  [4]=>
  int(8134)
  [5]=>
  string(87) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Divide by zero error encountered."
}

사용자가 이전 방법을 선호하는 경우 새 구성 옵션 pdo_sqlsrv.report_additional_errors를 사용하여 해제할 수 있습니다. php 스크립트의 시작 부분에 다음 줄을 추가하면 됩니다.

ini_set('pdo_sqlsrv.report_additional_errors', 0);

이 경우, 동일한 예제 스크립트를 실행할 때 다음과 같은 오류 정보가 표시됩니다.

array(3) {
  [0]=>
  string(5) "01000"
  [1]=>
  int(5701)
  [2]=>
  string(91) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'tempdb'."
}

필요하면 사용자는 php 파일에 다음 줄을 추가하여 모든 php 스크립트에서 이 기능을 해제할 수 있습니다.

pdo_sqlsrv.report_additional_errors = 0

경고 및 오류

5\.9.0부터 ODBC 경고는 더 이상 오류로 로그되지 않습니다. 즉, “01” 접두사가 있는 오류 코드가 경고로 로그됩니다. 즉, 사용자가 오류만 로그하고자 하는 경우 다음과 같이 php를 업데이트합니다.

[pdo_sqlsrv]  
pdo_sqlsrv.log_severity = 1

이 경우 로그 파일에는 경고 메시지가 포함되지 않습니다. Pdo_sqlsrv 사용자에 대해 로깅이 작동하는 방식을 확인하세요.

참고 항목

PDO 클래스

PDO

PDOStatement::errorInfo