PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как Postgres RAISE EXCEPTION се преобразува в PDOException?

Използвайте code свойството на PDOException за да получите SQLSTATE . Вижте документацията за PDOException

За да управлявате SQLSTATE генериран от PL/PgSQL функция, предизвикваща грешка, вие използвате RAISE ... SQLSTATE според документацията .

Разбира се, за да работи това, драйверът на базата данни трябва правилно да докладва SQLSTATE . Проверих, че PDO прави това поне в PHP 5.4.11 с PostgreSQL 9.2, според следния самостоятелен примерен код, който може да бъде изпълнен с php изпълним файл от командния ред:

<?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

Заменете кодовия блок от втория $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");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се посочи схемата при свързване към postgres с JDBC?

  2. Импортиране на файлове от PostgreSQL в R

  3. Разработване на администраторска роля:PG::Грешка:ГРЕШКА:администратори на връзка вече съществува

  4. няма запис pg_hba.conf за хост

  5. Връщане на стойности на колона преди АКТУАЛИЗАЦИЯ, използвайки само SQL