Предотвратить отображение сообщения об ошибке SQL

В моей таблице я создал индекс в 'col1', чтобы предотвратить дублирование записей, которые хорошо работают, но появившееся сообщение об ошибке, отображаемое пользователю при попытке добавить дублируемую запись, кажется мне проблемой безопасности, поскольку оно отображает SQL, включая префикс таблицы.

Есть ли способ остановить Joomla от отображения SQL в сообщении об ошибке?

Я попытался изменить настройки отчетов об ошибках в глобальной конфигурации, но я не могу сказать, насколько это возможно ...

Пример сообщения:

  

Ошибка

     

Сохранить с ошибкой: Дублировать запись 'Test' для ключа 'TestKey' SQL = INSERT INTO `jml_mycomp_tbl1` (` id`, `col1`,` ordering`, `state`,` created_by`) VALUES ( '0', 'Тест', '2', '1', '730')

10 голосов | спросил doovers 14 Mayam14 2014, 02:56:12

3 ответа


6

Возможно, вы можете использовать команду try catch:

попробовать
{
//Ваш код для запуска SQL здесь
}
catch (Исключение $ e)
{
$ this-> setError («Сообщение об ошибке, которое вы хотите»);
return false;
}
ответил Tuan Pham Ngoc 14 Maypm14 2014, 12:22:51
3

Поскольку это не представляется возможным предотвратить это поведение, я применил следующее решение. Добавьте дубликат проверки в метод JTable check:

//Проверить наличие дубликатов
$ db = JFactory :: getDbo ();
$ query = $ db-> getQuery (true);

$ Query- > выберите ( 'COUNT (*)');
$ Query- > из ($ this- > получить ( '_ TBL'));
$ query-> where ($ db-> quoteName ('col1'). '='. $ db-> quote ($ this-> col1));

$ Db- > SetQuery ($ запроса);
$ result = $ db-> loadResult ();

if ($ result)
{
    $ this-> setError ("Дублировать запись для col1 = '". $ this-> col1. "'");
    return false;
}
ответил doovers 14 Mayam14 2014, 07:04:11
1

Вы должны изменить свой код, который заставляет вставить сначала проверять наличие дубликатов и возвращать правильную ошибку (тот, который вы пишете) пользователю, а не полагаться на фактическую ошибку, возвращаемую MySQL.

ответил Ivo 14 Mayam14 2014, 03:00:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132