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:
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.
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.