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!
Deixe um comentário:
Deixe seu comentário. Só serão exibidos comentários ligados ao texto do post. Links serão removidos.