为了账号安全,请及时绑定邮箱和手机立即绑定

模型类抛出异常后无法被捕获?


<?php
namespace core\lib;
class model extends \PDO{
    public function __construct(){
        $dsn = "mysql:host=localhost;dbname=test";
        $username = "root";
        $password = "wrongpw";
        try{
            parent::__construct($dsn,$username,$password);
        }catch(\PDOExpcetion $e){
            echo $e->getMessage();
	    }
    }
}

按照老师的代码,故意将数据库密码写错,执行时抛出的异常不能被捕获而报错,这是为什么呢?PS:密码不写错,则程序运行正常,model类可以正常执行CURD语句。

报错信息如下:

查资料看着是抛出的pdoexception对象未被捕获才会这样报错。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)' in D:\xampp\htdocs\MoocFramework\FW\core\lib\model.php:13 Stack trace: #0 D:\xampp\htdocs\MoocFramework\FW\core\lib\model.php(13): PDO->__construct('mysql:host=loca...', 'root', '1234561') #1 D:\xampp\htdocs\MoocFramework\FW\app\ctrl\indexCtrl.php(11): core\lib\model->__construct() #2 D:\xampp\htdocs\MoocFramework\FW\core\imooc.php(37): app\ctrl\indexCtrl->index() #3 D:\xampp\htdocs\MoocFramework\FW\index.php(30): core\imooc::run() #4 {main} thrown in D:\xampp\htdocs\MoocFramework\FW\core\lib\model.php on line 13


正在回答

1 回答

太粗心了,仔细看你的代码,

catch(\PDOExpcetion $e){

            echo $e->getMessage();

        }

PDOExpcetion 这个单词写错了,应该是PDOException,咋会犯这种低级错误。。 IDE不会提示吗

0 回复 有任何疑惑可以回复我~
#1

MrLion2042 提问者

确实是写错了。非常感谢!
2016-10-18 回复 有任何疑惑可以回复我~
#2

slcheng 回复 MrLion2042 提问者

这种问题很好排查的,首先正确的时候没任何错误,说明try及其上面的代码是没问题的,进到catch里边才出问题,我第一个想到的是是不是exception的类型有问题,然后看你下边贴出来的报错,确实是PDOException的异常未被捕获,这就奇怪了,然后一看居然是你把单词写错了。。。 话说一般的编辑器都会有提示的,你写错单词会被标红就知道了
2016-10-18 回复 有任何疑惑可以回复我~
#3

MrLion2042 提问者

sublime text3用那款插件可以进行提示这样的语法错误?有推荐的呗?我现在用的sublime linter未标记语法错误。
2016-10-19 回复 有任何疑惑可以回复我~
#4

slcheng 回复 MrLion2042 提问者

我用的是PHPstorm,你可以试试
2016-10-21 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

模型类抛出异常后无法被捕获?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信