PDOException更改消息

时间:2017-05-11 19:02:25

标签: php pdo phpmyadmin

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

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());
    }
}

寻求帮助

1 个答案:

答案 0 :(得分:0)

您可以考虑从PDOException中映射出所有错误...例如:

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()));
}