簡體   English   中英

異常參數錯誤

[英]wrong parameters for exception

我收到以下錯誤消息:

Exception 的錯誤參數([string $exception [, long $code [, Exception $previous = NULL]]])

這是我的代碼:

class DAOException extends Exception {

function __construct($message, $code = 0, Exception $previous = null){
    parent::__construct($message, $code, $previous);
}

我試圖讓自己的例外,但它一直說我在這一行有一個錯誤:

parent::__construct($message, $code, $previous).

這是我何時可以調用此異常的示例:

public function add(FilmDTO $filmDTO){
        try{
            $addPreparedStatement = parent::getConnection()->prepare(FilmDAO::ADD_REQUEST);
            $addPreparedStatement->bindParam(':titre', $filmDTO->getTitre());
            $addPreparedStatement->bindParam(':duree', $filmDTO->getDuree());
            $addPreparedStatement->bindParam(':realisateur', $filmDTO->getRealisateur());
            $addPreparedStatement->execute();
        } catch(PDOException $pdoException){
            throw new DAOException($pdoException->getMessage(), $pdoException->getCode(), $pdoException);
        }

    }

這是因為 PDO 異常可以具有字母數字代碼,而異常只能具有整數代碼。 因此,在 DAO 構造函數中您將獲得的代碼(PDO 代碼 - 一個字符串)傳遞給異常構造的地方,它沒有它。

您可以通過將代碼轉換為 DAOException 構造函數中的整數來解決此問題。 如果您需要完整的字符串代碼(我不確定它是否為您提供了更多有用的信息),您可以隨時將其附加或添加到消息字符串中(同樣,在 DAOException 構造函數中)

PDOException 類::getCode() 可能返回字符串:

最終公共 Exception::getCode ( void ) :混合

它這樣做了,錯誤代碼像HY1234

使用帶有FILTER_SANITIZE_NUMBER_INT filter_var函數來獲取不帶HY的代碼號1234 請記住, filter_var返回一個字符串而不是 int 並且它可能返回 false 所以有一個默認的異常代碼,例如 0 這樣的:

class DAOException extends Exception {

function __construct($message, $code = 0, Exception $previous = null){

    //exception code coversion
    $code = filter_var($code, \FILTER_SANITIZE_NUMBER_INT);
    if ($code === false) {
        $code = 0;
    } else {
        $code = (int) $code;
    }

    parent::__construct($message, $code, $previous);
}

錯誤代碼的問題並非特定於 PDO 異常,而是針對所有異常,請參閱以下問題:

PHP Exception::getCode() 與它實現的 Throwable 接口相矛盾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM