it-swarm-es.tech

Evitar que el mensaje de error muestre SQL

En mi tabla, he creado un índice en 'col1' para evitar entradas duplicadas que funciona bien, pero el mensaje de error resultante que se muestra a un usuario cuando intenta agregar una entrada duplicada me parece un problema de seguridad, ya que muestra el SQL incluyendo El prefijo de la tabla.

¿Hay alguna forma de evitar que Joomla muestre el SQL en el mensaje de error?

Intenté cambiar la configuración de informes de errores en la configuración global, pero no tiene ningún efecto por lo que puedo decir ...

Mensaje de ejemplo:

Error

Save falló con el siguiente error: Duplicar la entrada 'Test' para la clave 'TestKey' SQL = INSERTAR EN `jml_mycomp_tbl1` (` id`, `col1`,` ordering`, `state`, 'created_by`) VALUES (' 0 ' , 'Prueba', '2', '1', '730')

10
doovers

Tal vez pueda usar 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

Como no parece posible evitar este comportamiento, implementé la siguiente solución. Agregue una verificación duplicada a una anulación del 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

Debe cambiar su código que hace que la inserción primero verifique si hay duplicados y devuelva un error apropiado (uno que usted escribe) al usuario y no confiar en mostrar el error real devuelto por MySQL.

1
Ivo