php -- PDO異常處理


異常處理:

  PHP:默認為直接報錯

  MYSQL:默認為靜默模式,錯就錯,不報錯

  PDO:默認為靜默模式,錯就錯,不報錯

 

以前,當PHP碰到錯誤的時候,會直接報錯,錯誤處理會變得相當麻煩。后來,當錯誤發生之后,會將錯誤信息不再直接輸出,放到一個類的對象里(PDOException)

 

要使用PDO異常處理,必須滿足兩個條件

  1、需要將錯誤處理模式變成異常模式

    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

  2、所有可能出錯的語句都必須放到錯誤捕捉語句塊里

  try{

         //錯誤捕捉語句塊

         //凡是有可能出現錯誤的語句都放在這

         //一旦出錯會立即進入catch語句,把所有的錯誤信息放到PDOexception $e里面

  }catch(PDOExecption $e){

         //將錯誤信息進行處理

  }

 

 例如:

  try{
        //連接認證
        $pdo = new PDO('mysql:host=localhost;dbname=project','root','root');

        //設置錯誤處理模式
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

        //組織SQL
        $sql= "update pro_student set s_age = 123 where s_id = 20";
        $res = $pdo->exec($sql);
    }catch(PDOException $e){
        //var_dump($e);
        //告訴用戶在哪個文件的哪一行出現了什么樣的錯誤
        echo '出現異常:<br/>';
        echo '錯誤出現的位置:' . $e->getFile() . $e->getLine() . '<br/>';
        echo '錯誤原因:'  . $e->getMessage();

        var_dump($e->getTrace());//獲取完整的錯誤數據
        exit;
    }

 

有的時候,如果數據執行沒有任何錯誤,但是就是不符合指定的業務邏輯。一旦出現業務邏輯錯誤,異常是沒有辦法捕捉(異常只捕捉語法錯誤),一般認為的去通過判斷語句的執行(結果),主動拋出異常,從而結束錯誤程序的運行。

語法:throw new PDOException;

     $sql = "select * from pro_student where s_id = 20";
        $stmt = $pdo->query($sql);
        if($stmt->fetchColumn(4) > 100) throw new PDOException; //拋出異常,立馬跳轉到catch語句塊 else{
            echo '沒有問題';
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM