这是我的代码:
error_reporting(0);
$mysqli=new mysqli("localhost",'root','','alex');
try{
if($mysqli->connect_errno){
throw new Exception("Database error!");
}else{
$query=$mysqli->query("Select companie,sum(suma) as suma from muncitori group by companie");
if(!$query){
throw new LastException("Query failed!");
}
}
while($result=$query->fetch_array()){
echo "Compania $result[companie] a cheltuit suma $result[suma] lei<br>";
}
}catch (Exception $e){
echo $e->getMessage();
}catch (LastException $e){
echo $e->getMessage();
}
class LastException extends Exception{}
如果我的查询失败并且我抛出异常,则(LastException $ s)catch块不会捕获异常但是(Exception $ e)会捕获它。问题出在哪儿?为什么Exception会捕获LastException的异常?
答案 0 :(得分:1)
你应该重新排序catch-blocks:从最特定到最一般,例如:
try {
//...
} catch (LastException $e) {
//...
} catch (Exception $e) {
//...
}
要了解的事情:
因此,如果先放置} catch (Exception $e)
,那么它将捕获所有异常,因为Exception
是PHP中所有异常的基类。
答案 1 :(得分:0)
反转这两个例外:
} catch (LastException $e) {
echo $e->getMessage();
} catch (Exception $s) {
echo $s->getMessage();
}