Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Meu problema é deveras simples creio eu mas não achei solução nenhuma na web e muito menos uma função no php que me ajudasse, então vou recorrer ao fórum.
tem uma consulta que é montado dinamicamente, o cliente pode definir o que quiser no input.
sendo assim preciso validar se aquele campo é válido, eu tenho a lógica para pegar os campos e tudo mais ai jogo no SQL e executo, só que fica me retornando erro que a coluna não existe, queria inibir esse erro, any idea?
na verdade não é uma má ideia, perderia um pouco tem tempo de execução mas até ai beleza.
@edit...
Eu não tenho como saber qual campo vem da consulta, estou usando um framework chamado scriptcase e esse infeliz não me retorna o nome do campo, ele associa a posição na tabela
SELECT nome, email FROM tabela
retorna
$array[0][0] //para nome na primeira linha
$array[0][1] //para email na primeira linha
$array[1][0] //para nome na segunda linha e assim vai
Ative o tratamento de exceptions na PDO.
$pdo->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION);
Execute a query dentro de um bloco try catch:
try {
$statement->execute($sql);
} catch(PDOException $e) {
}
Dentro do bloco catch, adicione a validação conforme o erro retornado no vetor errorInfo:
} catch(PDOException $e) {
$errorInfo = $e->errorInfo();
if($errorInfo[1] == 1054) {
echo 'coluna não existente';
}
}
A posição 1 do vetor errors info, é código específico do erro. No caso o erro 1054, é coluna desconhecida.
Você encontra todos os erros no link abaixo:
http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html
É gabriel, essa foi minha primeira ideia também mas eu não sei qual conexão usada por esse framework..
teria que dar sorte e se for PDO iria tratar, o mais difícil é que tudo quem gera é a ferramenta e então eu fico limitado quanto a códigos.
queria tanto poder codar a conexão..
existe uma forma, de você tratar todos os erros do PHP como exceptions, eu sugeriria isso como último "recurso", pois qualquer erro simples, será uma exception. Segue o código:
function exceptionErrorHandler( $errorNumber, $errorString, $errorFile, $errorLine ) {
throw new ErrorException($errorString, 0, $errorNumber, $errorFile, $errorLine);
}
set_error_handler("exceptionErrorHandler", E_ALL );
Adicione o trecho acima no início do seu código. Defina, aonde está E_ALL, os tipos de erros que você quer tratar como exception.
acho que isso vai resolver, vlw.
Sera que puxar os nomes dos campos em uma array e depois verificar se existe este nome resolveria?