다음을 통해 공유


PDO::errorInfo

PHP 드라이버 다운로드

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

구문

array PDO::errorInfo();  

Return Value

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

  • SQLSTATE 오류 코드입니다.

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

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

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

설명

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

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

예시

이 예제에서는 열의 이름이 철자가 틀렸고(Cityx 대신 City), 오류가 발생하여 보고됩니다.

<?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 드라이버가 문제를 진단하는 데 도움이 되는 두 개 이상의 오류를 반환할 수 있습니다. 그러나 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.ini 파일에 다음 줄을 추가하도록 선택할 수 있습니다.

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