web-dev-qa-db-fra.com

Empêcher le message d'erreur d'afficher le code SQL

Dans ma table, j'ai créé un index sur 'col1' pour empêcher les entrées en double qui fonctionne bien, mais le message d'erreur résultant affiché à l'utilisateur lorsqu'il tente d'ajouter une entrée en double me semble poser un problème de sécurité car il affiche le code SQL, y compris le préfixe de la table.

Existe-t-il un moyen d'empêcher Joomla d'afficher le code SQL dans le message d'erreur?

J'ai essayé de modifier les paramètres de rapport d'erreur dans la configuration globale, mais cela n'a aucun effet, pour autant que je sache ...

Exemple de message:

Erreur

L'enregistrement a échoué avec l'erreur suivante: Entrée "Test" de la clé "TestKey" SQL = INSERT INTO `jml_mycomp_tbl1` (` id`, `col1`,` ordering`, `state`,` created_by`) VALUES ('0' , 'Test', '2', '1', '730')

10
doovers

Peut-être que vous pouvez utiliser une commande 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

Comme il ne semble pas possible d'empêcher ce problème, j'ai implémenté la solution suivante. Ajouter une vérification en double à une substitution de méthode 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

Vous devez changer le code qui fait que l'insertion vérifie d'abord la présence de doublons et renvoie une erreur appropriée (celle que vous écrivez) à l'utilisateur et ne vous fiez pas à l'affichage de l'erreur réelle renvoyée par MySQL.

1
Ivo