Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Manipulação de erros com PDO

Olá pessoal, no primeiro curso de php e msql vimos uma forma de mostrar se a transação correu bem ou se algum erro foi gerado. Para isso utilizamos o método mysqli_error($conexao)

Usando PDO qual é a maneira de refatorar o código abaixo afim de receber a mensagem de erro?

Obs.: nas aulas o professor tira o retorno das funções.

Exemplo de alguma ClasseDAO:

    function insere($p1, $p2){
        $query = "insert into tabela (campo1, campo2) values({$p1}, {$p2})";
        return mysqli_query($this->conexao, $query);
    }

Arquivo que clama a ClasseDAO:

$resultado = $classe->insere($p1, $p2);

if($resultado){
    $_SESSION['success'] = 'Ordem de serviço cadastrada com sucesso';
}else{
    $msg = mysqli_error($conexao);
    $_SESSION['danger'] = "A Ordem de serviço não foi cadastrada: $msg" ;
}
3 respostas
solução!

Olá, Israel!

Existe o método PDO::errorInfo() que retorna um array com as informações sobre o erro.

Eu particularmente prefiro a seguinte abordagem: Adicionar o um atributo ao objeto da classe PDO, dizendo que os erros ocorridos devem lançar uma Exceção.

$pdo = new PDO($stringDeConexao, $usuario, $senha);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

E quando eu for executar alguma ação que pode resultar em erro, envolvo-a em um bloco try - catch.

try {
    $pdo->exec($query);
} catch (PDOException $e) {
    echo $e->getMessage();
}

Espero que tenha ficado claro e que eu possa ter ajudado.

Carlos, primeiramente obrigado por sua resposta, gostei muito da sua sugestão, me parece mesmo mais correto/profissional usar o try catch. Fiz da seguinte maneira no arquivo que chama a ClasseDAO:

try{
    $clienteDao->cadastraPessoa($cliente);
    echo "Cliente cadastrado com sucesso";
}catch (\PDOException $e){
    echo "Falha ao cadastrar o cliente : {$e->getMessage()}";
}

Funcionou exatamente como eu queria, a ideia é essa mesmo né?

Exatamente isso aí. Também acho mais correto, por realmente ser uma espécie de erro, tratar num catch.

Que bom que ajudei, Israel!