PHP--PDO錯誤與錯誤處理

來源:互聯網
上載者:User
PDO 提供了三種不同的錯誤處理模式,以滿足不同風格的應用開發:

PDO::ERRMODE_SILENT此為預設模式。 PDO 將只簡單地設定錯誤碼,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法來檢查語句和資料庫物件。如果錯誤是由於對語句對象的調用而產生的,那麼可以調用那個對象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果錯誤是由於調用資料庫物件而產生的,那麼可以在資料庫物件上調用上述兩個方法。

PDO::ERRMODE_WARNING除設定錯誤碼之外,PDO 還將發出一條傳統的 E_WARNING 資訊。如果只是想看看發生了什麼問題且不中斷應用程式的流程,那麼此設定在調試/測試期間非常有用。

PDO::ERRMODE_EXCEPTION除設定錯誤碼之外,PDO 還將拋出一個 PDOException 異常類並設定它的屬性來反射錯誤碼和錯誤資訊。此設定在調試期間也非常有用,因為它會有效地放大指令碼中產生錯誤的點,從而可以非常快速地指出代碼中有問題的潛在地區(記住:如果異常導致指令碼終止,則事務被自動復原)。

異常模式另一個非常有用的是,相比傳統 PHP 風格的警告,可以更清晰地構建自己的錯誤處理,而且比起靜默模式和顯式地檢查每種資料庫調用的傳回值,異常模式需要的代碼/嵌套更少。

PDO 使用 SQL-92 SQLSTATE 來規範錯誤碼字串;不同 PDO 驅動程式負責將它們的本地代碼映射為適當的 SQLSTATE 代碼。 PDO::errorCode() 方法返回一個單獨的 SQLSTATE 碼。如果需要更多此錯誤的細節資訊,PDO 還提供了一個 PDO::errorInfo() 方法來返回一個包含 SQLSTATE 碼、特定驅動錯誤碼以及此驅動的錯誤字串的數組。

Example #1 建立 PDO 執行個體並設定錯誤模式

<?php    $dsn = 'mysql:dbname=testdb;host=127.0.0.1';    $user = 'dbuser';    $password = 'dbpass';    try {        $dbh = new PDO($dsn, $user, $password);        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    } catch (PDOException $e) {        echo 'Connection failed: ' . $e->getMessage();    }?>

不管當前是否設定了 PDO::ATTR_ERRMODE ,如果串連失敗, PDO::__construct() 將總是拋出一個 PDOException 異常。未捕獲異常是致命的。

Example #2 建立 PDO 執行個體並在建構函式中設定錯誤模式

<?php    $dsn = 'mysql:dbname=test;host=127.0.0.1';    $user = 'googleguy';    $password = 'googleguy';    /*     *使用 try/catch 圍繞建構函式仍然有效,即使設定了 ERRMODE 為 WARNING,     *因為如果串連失敗,PDO::__construct 將總是拋出一個 PDOException 異常。     */    try {        $dbh = new PDO($dsn, $user, $password,             array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));    } catch (PDOException $e) {        echo 'Connection failed: ' . $e->getMessage();        exit;    }// 這裡將導致 PDO 拋出一個 E_WARNING 層級的錯誤,而不是 一個異常 (當資料表不存在時)$dbh->query("SELECT wrongcolumn FROM wrongtable");?>

以上常式會輸出:

Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in/tmp/pdo_test.php on line 18
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.