quinta-feira, 30 de junho de 2016

Gerenciando os erros no PDO



Como ativar a exibição dos erros no PDO

Por padrão, PDO não exibe os diversos erros ligados ao código ou às pesquisas. Para fazê-los aparecer, é preciso ativar a opção durante a inicialização: 

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Como este: 

try{
$bdd =new PDO('mysql:host=localhost; 
 dbname=mabdd; charset=utf8', 'user', 'password');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erro: ' . $e->getMessage());
}

Observação: pense também em ativar a exibição dos erros PHP, habilitando a opção no php.iniou colocando, no início dos seus scripts PHP a linha do seguinte código: 

error_reporting(E_ALL);

Relatório de erro 

Como detectar os erros nas pesquisas

Para detectar os erros de código ou de pesquisas você pode usar blocos TRY/CATCH. Por exemplo: 

//preparação da pesquisa e das variáveis
 $sql = "INSERT INTO matable (campo1,campo2)   VALUES (:valor1,:outrovalor)";

 $datas = array(':valor1'=>$valor1, ':outrovalor'=>$joão);

//Execução da pesquisa
try{
  $pesquisa = $bdd -> prepare($sql) ;
  $pesquisa ->execute($datas) ;
}catch(Exception $e){
  // em caso de erro:
   eco " Erro ! ".$e->getMessage();
   eco " As datas : " ;
  print_r($datas);
}

Observação: o fato de separar a pesquisa (o conteúdo da variável $sql) de sua execução (o ‘prepare’ e o ‘execute’) permite fazer um eco em caso de necessidade. O mesmo vale para as variáveis (conteúdos em $datas). 

Erro relacionado com um problema na pesquisa

Este é um outro assunto...mas já posso adiantar que é imperativo testar suas pesquisas DIRETAMENTE em seu BDD (passando, por exemplo, pelo phpmyadmin, se você estiver em mysql ou por um software como o HeidiSql). Isso permitirá que você saiba exatamente onde está o erro: um nome de campo ou tabela com erros ortográficos, um espaço esquecido, citações faltando, etc. 

Foto: © Pixabay.Fonte: http://br.ccm.net/faq/
Anterior
Proxima

Postador

0 comentários:

Os comentários serão moderados antes de publicar! respondo todos, obrigado por comentar.