Php 消息的异常更改
下午好,我正在做一个CRUD,我正在为它的完成做最后的评论,因为主题是,例如,如果在其中一个表中,我们放置了一个重复的PK,则PDO异常抛出此错误:Php 消息的异常更改,php,pdo,phpmyadmin,Php,Pdo,Phpmyadmin,下午好,我正在做一个CRUD,我正在为它的完成做最后的评论,因为主题是,例如,如果在其中一个表中,我们放置了一个重复的PK,则PDO异常抛出此错误: SQLSTATE: 23000 (ER_DUP_KEY) 但当然,我想知道是否有任何方法可以修改该消息。我看到它是一个重复的主键,但例如一个在BBDD生活中没有看到任何东西的用户不能,我不知道我是否解释,我知道如果我在它上放置一个echo,总是会有那个错误,可能还有其他错误 这将是对BBDD的建设 public function __CONSTR
SQLSTATE: 23000 (ER_DUP_KEY)
但当然,我想知道是否有任何方法可以修改该消息。我看到它是一个重复的主键,但例如一个在BBDD生活中没有看到任何东西的用户不能,我不知道我是否解释,我知道如果我在它上放置一个echo
,总是会有那个错误,可能还有其他错误
这将是对BBDD的建设
public function __CONSTRUCT() {
try {
$this->pdo = new PDO('mysql:host=localhost;dbname=prueba;charset=UTF8', 'root', '');
$this->pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$this->pdo->exec("SET NAMES 'utf8';");
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
die($e->getMessage());
}
}
例如,插入函数:
public function Registrar(Categoria $data) {
try {
$sql = "INSERT INTO categoria (acronimo,categoria,registro_calidad)
VALUES (?, ?,?)";
//Ejecucion de la consulta siguiente
$this->pdo->prepare($sql)->execute(array(
$data->__GET('acronimo'),
$data->__GET('categoria'),
$data->__GET('registro_calidad')
)
);
} catch (PDOException $e) {
die($e->getMessage());
}
}
<帮助> 您可以考虑从<代码> pdoExtExabor >代码>中映射所有错误。例如:
function outputPDOerror($errorCode = 0) {
$errors = [
'23000' => "Error: Duplicate Key",
'23001' => "Error: Some other error"
];
return array_key_exists($errorCode, $errors) ? $errors[$errorCode] : 'Unknown Error!';
}
然后在try/catch块中:
catch (PDOException $e) {
die(outputPDOerror($e->getCode()));
}
+1@HalfCrazed mapping它非常适合我的CRUD,现在我可以映射(虽然需要很长时间),但这将使所有用户都能理解mysql的错误,非常感谢您的帮助。@alberto这是一个糟糕的建议,因为有太多的原因,当然您通常不会透露DB错误,但是在必要的时候很少有用例。这是一个非常粗略的例子,希望能帮助他开始并探索其他解决方案。你永远不应该改变数据库错误。更不用说它永远不应该显示给用户