• PDO基础应用之异常处理


    思考:PDOException可以捕捉到异常,也有其他模式,那么在实际开发的时候我们到底是使用PDO的那种错误模式呢?

    引入:其实PDO之所以提供了这么多模式,就是要使用人员根据实际情况来选择模式,如果一个项目中,需要我们去控制项目bug,那么就适合使用异常模式来进行处理

    PDOException异常处理【掌握】

    定义:PDOException 是PDO从Excetion继承的一个用于处理PDO错误的异常类,一般如果做一套扩展,都会从Exception类继承实现一套明确的错误机制(错误来自哪里)

    1.要使用PDOException异常处理,需要设定PDO的错误模式为异常模式,在PDO中可以通过两种模式来实现异常模式设定

    • 在初始化PDO对象的时候,利用第四个参数来设定
    • 在初始化PDO之后,利用PDO::setAttrinute()方法来修改错误模式
    <?php
    
        //初始化PDO时设定错误模式
        $drivers=array(
            PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCPTION
        );
        $link=new PDO('mysql:host=localhost;port=3306;dbname=senven;charset=utf8','root','root',$drivers);
       
        //初始化之后设置异常模式
        $pdo=new PDO('mysql:host=localhost;port=3306;dbname=senven;charset=utf8','root','root');
        $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCPTION);
    }
    ?>

    2.当确定了我们要使用异常模式处理之后,我们就可以针对可能出错的未知使用异常来进行捕捉了(通常是进行SQL执行的时候)

    <?php
    
        //初始化PDO时设定错误模式
        $drivers=array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        );
        $link=new PDO('mysql:host=localhost;port=3306;dbname=senven;charset=utf8','root','root',$drivers);
       
       try {
    
          $link->exec('set names utf-8');  //错误
       } catch (PDOException  $e) {
           echo 'SQL错误';
           echo $e->getline();
           die();
       }
    
    ?>

    3.PDO执行来讲,因为PDO异常模式的设置是在PDO实例化之后,那么如果PDO实例化的时候错误,此时好像PDOException就无法工作了,事实上,PDO也考虑到了这点,

    所以实例化的时候,本身是可以使用try{}catch(){}来捕获的

    <?php
    
        //初始化PDO时设定错误模式
        $drivers=array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        );
    
       
       try {
        //这里dbname原本是senven 我们少打一个n,可以捕获到的
        $link=new PDO('mysql:host=localhost;port=3306;dbname=senve;charset=utf8','root','root',$drivers);
       } catch (PDOException  $e) {
           echo 'SQL错误';
           echo $e->getline();
           die();
       }
    
    ?>

    4.PDO执行过程中,如果碰到了意外,(逻辑无法继续执行),那么可以主动抛出异常

      
       try {
        //这里dbname原本是senven 我们少打一个n,可以捕获到的
        $link=new PDO('mysql:host=localhost;port=3306;dbname=senve;charset=utf8','root','root',$drivers);
       } catch (PDOException  $e) {
          my_exception($e);
       }
    
    
    
    
       //因为异常使用比较多,我们可以对异常 处理进行封装
    
       function my_exception(PDOException $e){
            echo 'SQL执行错误'.'<br>';
            echo '错误行号'.$e->getLine().'<br>';
            echo '错误信息'.$e->getMessage().'<br>';
       }
       //如果我想执行一个sql语句,语法是没有错误的,但是id为100的是不存在的 mysql也不会报错
       //这样的话就不能给用户提示删除成功
       //这种情况就需要我们抓异常主动抛出异常
    
       try {
           $link=new PDO('mysql:host=localhost;port=3306;dbname=senven;charset=utf8','root','root',$drivers);
           $res=$link->exec('delete from hylist where id=100');
           if(!$res) throw new PDOException('删除失败');        //抛出删除失败
       } catch (PDOException $e) {
           my_exception($e);
       }

    总结:

      1.PDOException 是一种用来捕获异常PDO(PDOStatement)类使用或称中产生的错误的

      2.PDOException 在使用之前需要开始异常模式(PDO实例化除外,可以直接捕获)

      3.PDOEExcepion一般是在SQL执行过程中出错,如果其他代码执行过程中,业务逻辑不符合要求(代码没问题),那么也可以使用throw new PDOException ()主动抛出异常

  • 相关阅读:
    引入C/C++动态库
    Linux新手常用命令
    使用Dotfunsctor
    C#上传数据到HTTP,HTTPS 代码示例
    C#多个泛型约束问题
    创建DataTable与DataGridView进行绑定
    递归迭代vector三种方法实现二路归并排序
    区间贪心算法
    递归和非递归实现二叉树的遍历
    C语言实现全排列和回溯法总结
  • 原文地址:https://www.cnblogs.com/xiaowie/p/12591617.html
Copyright © 2020-2023  润新知