कोड
का प्रयोग करें 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");
}