我收到以下错误消息:
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);
}
}
答案 0 :(得分:1)
这是因为PDO异常可以有一个字母数字的代码,而异常只能有一个整数代码。因此,在DAO构造函数中,您将已经给出的代码(PDO代码 - 字符串)传递给异常构造,它没有它。
您可以通过将代码转换为DAOException构造函数中的整数来解决此问题。如果您需要完整的字符串代码(我不确定它是否为您提供了更多有用的信息),您可以随时将其附加或添加到消息字符串中(同样,在DAOException构造函数中)
答案 1 :(得分:0)
The PDOException class :: getCode()可能返回字符串:
最终公共异常:: getCode(void):混合
它做到了,并且显示了错误代码,例如HY1234
将filter_var函数与FILTER_SANITIZE_NUMBER_INT
一起使用,以得到没有1234
的代码HY
。请记住,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() contradicts Throwable interface that it implements