PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

W jaki sposób wyjątek Postgres RAISE EXCEPTION jest konwertowany na wyjątek PDOException?

Użyj code właściwość PDOException aby uzyskać SQLSTATE . Zobacz dokumentację PDOException

Aby kontrolować SQLSTATE wygenerowane przez funkcję PL/PgSQL zgłaszającą błąd, używasz RAISE ... SQLSTATE zgodnie z dokumentacją .

Oczywiście, aby to zadziałało, sterownik bazy danych musi poprawnie raportować SQLSTATE . Sprawdziłem, że PDO robi to przynajmniej w PHP 5.4.11 z PostgreSQL 9.2, na następujący samodzielny przykładowy kod, który można wykonać za pomocą php plik wykonywalny z wiersza poleceń:

<?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());
}
?>

Dane wyjściowe to:

Function call failed with SQLSTATE UE001, message ERROR:  error message

Zastąp blok kodu z drugiego $sth->execute() na końcu kodu, aby zademonstrować, że tryb obsługi wyjątków również działa dobrze:

$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");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tablica PHP do tablicy postgres

  2. Jak przekonwertować czas lokalny na UTC?

  3. Railsy + PostgreSQL — korzystanie z Like

  4. Metoda uwierzytelniania PostgreSQL 10 nie jest obsługiwana

  5. postgresql - uzyskaj liczbę według zakresów wartości