[英]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 異常,而是針對所有異常,請參閱以下問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.