속성을 PDOException
으로 설정하면 SQLSTATE
이됩니다. the documentation for PDOException
오류를 발생시키는 PL/PgSQL 함수에 의해 생성 된 SQLSTATE
을 제어하려면 RAISE ... SQLSTATE
as per the documentation을 사용합니다.
물론이 작업을 수행하려면 데이터베이스 드라이버가 SQLSTATE
을 올바르게보고해야합니다.
<?php
$pdo = new PDO('pgsql:');
$sql = <<<EOD
CREATE OR REPLACE FUNCTION exceptiondemo() RETURNS void AS $$
BEGIN
RAISE SQLSTATE 'UE001' USING MESSAGE = 'error message';
END;
$$ LANGUAGE plpgsql
EOD;
$sth = $pdo->prepare($sql);
if (!$sth->execute()) {
die("Failed to create test function\n");
}
$sql = "SELECT exceptiondemo();";
$sth = $pdo->prepare($sql);
if (!$sth->execute()) {
$ei = $sth->errorInfo();
die("Function call failed with SQLSTATE " . $ei[0] . ", message " . $ei[2] . "\n");
// Shortcut way:
// die("Function call failed with SQLSTATE " . $sth->errorCode());
}
?>
출력은 다음과 같습니다 :
Function call failed with SQLSTATE UE001, message ERROR: error message
나는 PDO는
php
명령 줄 실행 파일을 실행 할 수있는 다음과 같은 독립 예제 코드에 따라, PostgreSQL의 9.2과 PHP 5.4.11 적어도이 작업을 수행하는 것을 확인했다
예외 처리 모드가 너무 잘 작동 함을 입증하기 위해 함께 코드의 끝에 제 $sth->execute()
의 코드 블록을 교체 :
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$sth->execute();
} catch (PDOException $err) {
$ei = $err->errorInfo;
die("Function call failed with SQLSTATE " . $ei[0] . ", message " . $ei[2] . "\n");
// Alternate version to just get code:
//die("Function call failed with SQLSTATE " . $err->getCode() . "\n");
}
* 항상 * 코드와 PostgreSQL 버전을 보여주십시오. –