Php 消息的异常更改

Php 消息的异常更改,php,pdo,phpmyadmin,Php,Pdo,Phpmyadmin,下午好,我正在做一个CRUD,我正在为它的完成做最后的评论,因为主题是,例如,如果在其中一个表中,我们放置了一个重复的PK,则PDO异常抛出此错误: SQLSTATE: 23000 (ER_DUP_KEY) 但当然,我想知道是否有任何方法可以修改该消息。我看到它是一个重复的主键,但例如一个在BBDD生活中没有看到任何东西的用户不能,我不知道我是否解释,我知道如果我在它上放置一个echo,总是会有那个错误,可能还有其他错误 这将是对BBDD的建设 public function __CONSTR

下午好,我正在做一个CRUD,我正在为它的完成做最后的评论,因为主题是,例如,如果在其中一个表中,我们放置了一个重复的PK,则PDO异常抛出此错误:

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错误,但是在必要的时候很少有用例。这是一个非常粗略的例子,希望能帮助他开始并探索其他解决方案。你永远不应该改变数据库错误。更不用说它永远不应该显示给用户