php 异常处理

try{
    echo 'try <br/>';
    $mysql = new mysqli('localhost', 'root', '111', 'test');
} catch (Exception $e){
    echo 'catch <br/>';
    echo $e->getMessage();
}

代码如上, 出现了异常
输出结果:
try

Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'root'@'localhost' (using password: YES) in /home/test/its2/webroot/public/unserialize.php on line 31

为什么没有执行输出catch?

阅读 2.4k
3 个回答

你需要告诉mysqli以异常的方式抛出,而不是警告。

mysqli_report(MYSQLI_REPORT_STRICT); // 加上这一行!!!

try{
    echo 'try <br/>';
    $mysql = new mysqli('localhost', 'root', '111', 'test');
} catch (Exception $e){
    echo 'catch <br/>';
    echo $e->getMessage();
}

再次访问,结果如下:
try
catch
Access denied for user 'root'@'localhost' (using password: YES)

请分清楚警告和Exception的区别。

PHP中的Warning和Error是PHP提醒开发者程序存在的问题,这个问题不一定要被处理
Exception是属于应用程序中开发自定义,并且要处理的问题,原则上讲Exception是一定要有对应处理的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题