ti-enxame.com

Impedir que a mensagem de erro mostre o SQL

Na minha tabela, criei um índice em 'col1' para evitar entradas duplicadas, o que funciona bem, mas a mensagem de erro resultante exibida ao usuário quando ele tenta adicionar uma entrada duplicada me parece uma preocupação de segurança, pois exibe o SQL incluindo o prefixo da tabela.

Existe alguma maneira de impedir que o Joomla exiba o SQL na mensagem de erro?

Eu tentei alterar as configurações do relatório de erros na configuração global, mas não tem efeito, tanto quanto eu posso dizer ...

Mensagem de exemplo:

Erro

Falha ao salvar com o seguinte erro: Entrada duplicada 'Test' para a chave 'TestKey' SQL = INSERT INTO `jml_mycomp_tbl1` (` id`, `col1`,` ordering`, `state`,` created_by`) VALUES ('0' , 'Teste', '2', '1', '730')

10
doovers

Talvez você possa usar um comando try catch:

try
{
//Your code to run the SQL here 
}
catch (Exception $e)
{
$this->setError('The error message you want');
return false;
}
6
Tuan Pham Ngoc

Como não parece possível evitar esse comportamento, implementei a seguinte solução. Adicione uma verificação duplicada a uma substituição de método JTablecheck:

// Check for duplicate entry
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select('COUNT(*)');
$query->from($this->get('_tbl'));
$query->where($db->quoteName('col1') . ' = ' . $db->quote($this->col1));

$db->setQuery($query);
$result = $db->loadResult();

if ($result) 
{
    $this->setError(" Duplicate entry for col1 = '" . $this->col1 . "'");
    return false;            
}
3
doovers

Você deve alterar seu código que faz com que a inserção verifique primeiro duplicados e retorne um erro adequado (que você escreve) ao usuário e não confie em mostrar o erro real retornado pelo MySQL.

1
Ivo