PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक पोस्टग्रेज RAISE EXCEPTION को PDOException में कैसे परिवर्तित किया जाता है?

कोड का प्रयोग करें PDOException . की संपत्ति SQLSTATE . प्राप्त करने के लिए . देखें PDOException

SQLSTATE को नियंत्रित करने के लिए PL/PgSQL फ़ंक्शन द्वारा उत्पन्न त्रुटि उत्पन्न करते हुए, आप उठाएं ... SQLSTATE दस्तावेज़ीकरण के अनुसार

बेशक, इसके लिए काम करने के लिए डेटाबेस ड्राइवर को SQLSTATE . को सही ढंग से रिपोर्ट करना होगा . मैंने सत्यापित किया है कि पीडीओ यह कम से कम 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. clojure.java.jdbc का उपयोग कर फ़ाइल से लोड SQL कथन पैच करना संभव है?

  2. PostgreSQL पंक्ति लॉक पढ़ें

  3. लेन-देन से प्रभावित नहीं अनुक्रम?

  4. रूबी में एक एसक्यूएल क्वेरी में मानों की सरणी भेजना?

  5. PostgreSQL में GROUP BY और COUNT