PDO::errorInfo
데이터베이스 핸들에서 최근 작업의 확장된 오류 정보를 검색합니다.
구문
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::errorInfo 및 PDOStatement::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 사용자에 대한 로깅 작동 방식을 확인하세요.