recherche

Maison  >  Questions et réponses  >  le corps du texte

mysql - PHP中 PDO 的错误模式,ERRMODE_EXCEPTION 和 ERRMODE_WARNING 区别是什么?

PDO::ERRMODE_EXCEPTION PDO::ERRMODE_WARNING 区别是什么?

我怎么看了以后,觉得这俩除了反馈信息的格式不一样外,别的看起来都一样?

就是讲解的时候有个"抛出"一词,谁可以简单的跟我说说什么区别?

伊谢尔伦伊谢尔伦2818 Il y a quelques jours670

répondre à tous(2)je répondrai

  • 巴扎黑

    巴扎黑2017-04-10 17:52:00

    错误模式说明:

    • 异常模式:
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    这个模式需要配合 try 使用 :
    一旦出错,就会:

    1. 创建一个对象,$e 也可以随便命名,从 $e->getMessage() 获取错误信息;

    2. 采取动作;

    try{
        
        要执行的命令...
    
    }catch(PDOException $e){
        echo "执行命令失败:".$e->getMessage();
        失败后的动作...
    }

    这个其实等于 缺省模式if($pdo->errorInfo()[2]) ...

    创建PDO的时候,为什么也用 try?
    因为这时候连PDO对象都没有,所以也不能设置错误模式,所以可以用try,
    一旦PDO创建成功,错误模式就成了 缺省模式,也就不能用try了.

    • 缺省模式:

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

    这个出错,会给 $pdo->errorCode()$pdo->errorInfo()[2] 赋值;

    可以用 if($pdo->errorInfo()[2])if($pdo->errorCode()) 判断脚本是不是出错.

    如果不出错,上面都是空的;

    • 警告模式:

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

    这个会echo出一个错误信息,打乱了脚本;
    学习调试的时候使用比较好;
    真用起来的时候,很多时候判断不出到底脚本有没有出错;

    répondre
    0
  • 黄舟

    黄舟2017-04-10 17:52:00

    请注意PHP的错误等级一文。

    Warning级别的错误,会直接显示在页面上,且无法自行根据错误处理相关的业务逻辑。
    Exception则是抛出一个可以被捕获的Exception对象,可以获取到详细的异常信息。

    try {
        $stmt = $pdo->prepare("select * from id = :id");
        // PGSQL严格限制数据类型,serial字段使用字符串字段进行匹配将会出错
        $stmt->bindValue(':id','string',PDO::PARAM_STR);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        // PDO执行出错时执行
        // 可以捕获到PDO抛出的异常,可以获取到详细的错误代码,错误描述,哪个文件第几行出错,本次请求中所有执行的文件等等
        var_dump($e);
    }

    répondre
    0
  • Annulerrépondre