如何获得PDO异常和其他异常?

时间:2016-07-13 04:32:26

标签: php pdo exception-handling try-catch

我有一个这样的脚本:

try {
    $stm = $dbh->prepare("INSERT .. SELECT query");
    $stm->execute();
    if ( $stm->rowCount() > 0 ) {
        echo 'inserted';
    } else {
        throw new Exception('No rows inserted');
    }
} catch(Exception $e) { 
    echo $e;
}

如您所见,catch阻止只访问我设置的Exception。实际上我还需要访问PDO异常。像这样:

} catch(Exception $e, PDOException $pdo) {
    echo  isset($pdo) ?  "other message: " . $e   : null;
    echo  isset($e)   ?  "PDO message: "   . $pdo : null;
}

如您所知,我目前的语法错误。我在谈论catch(Exception $e, PDOException $pdo)。那有什么解决方法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用多个catch块

catch(PDOException $pdo) { 
    echo $pdo;
}
catch(Exception $e) { 
    echo $e;
}

或者你仍然可以保留一个阻止障碍,并从 instanceof

获取帮助
catch(Exception $e) { 
    if($e instanceof PDOException)
        // pdoexception
    else
       // others
}