HUFERSIL.WEBDEVELOPER

Lumine – Monitorando erros de SQL

Olá,

Uma coisa que muitas pessoas tem me pedido, é uma forma de saber os erros de SQL que podem ocorrer devido a má formação das consultas, falta de campos, entre outras coisas que são enviadas pelo banco de dados.

Você poderá verificar de duas formas:

  • Pelo método getErrorMsg() da interface ILumine_Connection;
  • Através de um ouvinte, adicionado a instância de conexão.

Através do método getErrorMsg()

Primeiro, você deverá executar uma consulta, para depois saber se houve algum erro.
Para recuperar esta mensagem, você deverá recuperar a conexão e pegar a última mensagem de erro.
Abaixo um exemplo de como fazê-lo:

// instanciando um novo objeto
$lista = new Usuario;

// o campo apelido NÃO existe, é pra dar erro mesmo
$lista->select('nome, usuario, senha, apelido')
	->find();

// exibe a mensagem de erro
echo $lista->_getConnection()->getErrorMsg();

Caso não haja erros, é retornada uma string vazia.

Verificando através de ouvintes (Listeners)

A outra forma, e que eu particularmente gosto mais é através de ouvintes.
Dessa forma, uma função fica monitorando todas as consultas com o banco de dados, e qualquer erro será apresentado na tela.
Assim fica bem mais fácil, pois você pode colocar isto em um arquivo de configuração e todas as consultas serão monitoradas!

// função para monitorar os erros de SQL
// a função será chamada passando os seguintes argumentos
// - $cnn => O objeto de conexão utilizado
// - $sql => A SQL que foi executada
// - $errorMsg => A mensagem de erro retornada
function exibeErro( $cnn, $sql, $errorMsg )
{
	// aqui vc coloca o que deve ser executado quando houver um erro
	$msg = '<h1> Erro de SQL </h1>';
	$msg .= '<div>Houve um erro na execução da SQL abaixo</div>';
	$msg .= '<pre>'.$sql.'</pre>';
	$msg .= '<div style="padding-top:10px">Error retornado:</div>';
	$msg .= '<div style="color: #FF0000">' . $errorMsg . '</div>';

	die( $msg );
}
// iniciando a configuração
$cfg = new Lumine_Configuration( $lumineConfig );

// recuperando a conexão
$conn = $cfg->getConnection();

// adicionando o ouvinte
$conn->addEventListener('onExecuteError', 'exibeErro');

 Assim será fácil de identificar e parar a execução de seu script quando houver um erro.

Você ainda pode passar, ao invés do nome da função, um array contendo a instancia de uma classe e o nome do método:

$conn->addEventListener('onExecuteError', array($logger, 'exibeErro') );

 Ou ainda chamar estáticamente um método de uma classe, passando o seu nome como primeiro item do array, sendo o segundo o nome do método

$conn->addEventListener('onExecuteError', array('NomeDaClasse', 'nomeDoMetodo') );

@braços e fiquem com Deus.

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

*

Pode usar estas etiquetas HTML e atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">