it-swarm.it

Impedisci al messaggio di errore di mostrare SQL

Nella mia tabella ho creato un indice su "col1" per impedire voci duplicate che funzionano bene ma il messaggio di errore risultante visualizzato a un utente quando tentano di aggiungere una voce duplicata mi sembra essere un problema di sicurezza in quanto visualizza l'SQL incluso il prefisso della tabella.

C'è un modo per impedire a Joomla di visualizzare l'SQL nel messaggio di errore?

Ho provato a modificare le impostazioni di segnalazione errori nella configurazione globale ma non ha alcun effetto per quanto ne so ...

Messaggio di esempio:

Errore

Salvataggio fallito con il seguente errore: Voce duplicata 'Test' per chiave 'TestKey' SQL = INSERISCI `jml_mycomp_tbl1` (` id`, `col1`,` ordering`, `state`,` Created_by`) VALUES ('0' , 'test', '2', '1', '730')

10
doovers

Forse puoi usare un 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

Poiché non sembra possibile prevenire questo comportamento, ho implementato la seguente soluzione. Aggiungi un controllo duplicato a un override del metodo 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

È necessario modificare il codice che rende l'inserto per verificare innanzitutto la presenza di duplicati e restituire all'utente un errore corretto (uno che si scrive) e non fare affidamento sulla visualizzazione dell'errore effettivo restituito da MySQL.

1
Ivo