publicidade

Tratando Erros em uma Conexão com PDO

Nesta postagem vamos falar sobre tratamento de erros durante a conexão com o Banco de Dados e para isso usaremos o código da postagem Criando uma Conexão Usando PDO e MySql como ponto de partida. A ideia aqui é poder enviar uma mensagem personalizada caso ocorra algum erro na tentativa de se conecta. Vamos manter as constantes com dados de acesso e a string de conexão que definimos lá sem nenhuma alteração.

# Servidos do nosso banco de dados.
define( 'DB_HOST', 'localhost'); 
# Nome do banco de dados.
define( 'DB_NAME', 'teste');
# Usuário de acesso.
define( 'DB_USER', 'root');
# Senha de acesso.
define( 'DB_PASS', ');
# String de Conexão.
$srv = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;

Nesta versão atualizada vamos usar um bloco Try/Catch para poder capturar erros durante a tentativa de conexão. Vale lembrar que nossa rotina de tratamento de erros é direcionada para erros do PDO especificamente. E faremos o tratamento dos erros que forem capturados e lançados como Exceções (Exception do PHP). Neste processo não abordaremos erros fatais que interrompem a execução do sistema.

try {
# nosso código a ser executado.
} catch {
# código a ser executado quando uma exceção for capturada..
}

Dentro de Try, criamos uma instância do PDO que será armazenada na variável $instance, que permitirá o acesso ao BD. Também vamos configurar o PDO para lançar uma exceção caso ocorra algum erro de Banco de Dados.

$instance = new PDO( $srv, DB_USER, DB_PASS );
$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Vamos usar a mesma instrução Sql da postagem anterior.

$query = "SELECT * FROM `car_store`";

Para efeito de estudo, vamos lançar manualmente uma exceção usando o throw que poderia identificar e tratar uma condição de erro conhecida. Neste caso vamos considerar que se a instrução Sql não existir ou estiver em branco devemos enviar uma mensagem personalizada de erro.

if( !isset($query) OR empty($query) ) {
   throw new Exception('A variável $query está em branco ou não foi definida', 1);    
}

Para testar a condição, basta comentar a linha onde definimos variável $query para simular o erro. Por fim executamos a query informando que queremos receber um array associativo, usando o atributo PDO::FETCH_ASSOC. Usamos uma estrutura de loop para exibir os resultados retornados com a consulta.

$stmt = $instance->query( $query , PDO::FETCH_ASSOC );

while ( $row = $stmt->fetch() ) {
    print_r( $row );
    echo "<br>";
}

Esse é todo o código dento de try, agora vamos ao catch (ou “catches” no nosso caso). No primeiro catch trataremos as exceções lançadas pelo PDO. A configuração que fizemos para o tratamento de erros do PDO fará com que esse tipo de erro seja direcionado para esse primeiro "catch".

# Exceções lançadas pelo PDO
catch (PDOException $e) {
    echo 'Erro PDO: ' . $e->getMessage();
} 

Já no segundo, trataremos qualquer outra exceção e, caso exista alguma condição conhecida que possa gerar um erro, podemos lançar uma exceção com "throw", e tratá-la aqui. No nosso exemplo, simulamos um erro que ocorrerá quando a variável $query não existir ou estiver em branco. Neste caso poderemos tratar esse erro aqui. 

# Exceções Gerais
catch (Exception $e) {
    echo 'Erro: ' . $e->getMessage();
# lembrando que para simular o erro, basta
# comentar a linha onde atribuímos um valor
# a variável $query.
}

Se tudo deu certo, o resultado esperado na tela, é o que segue abaixo:

Array ( [id] => 1 [brand] => Renault [model] => Logan [price] => 60000 )
Array ( [id] => 2 [brand] => Volkswagem [model] => Fox [price] => 55000 )

E se simularmos o erro comentanto a linha onde definimos a variável $query, o resultado será esse:

Erro: A variável $query está em branco ou não foi definida

É isso! Um exemplo básico para efeito de estudo da conexão ao MySql usando o PDO do PHP, usando try/catch para capturar e tratar erros do PDO. Em uma próxima postagens vamos converter nosso código em uma classe de conexão com mais alguns recursos!

Tratando Erros em uma Conexão com PDO

Nesta postagem vamos falar sobre tratamento de erros durante a conexão com o Banco de Dados e para isso usaremos o código da postagem Criando...

publicidade

Deixe um comentário:


Deixe seu comentário. Só serão exibidos comentários ligados ao texto do post. Links serão removidos.

Comentários: