В моей таблице я создал индекс 'col1' для предотвращения дублирования записей, который работает хорошо, но получающееся в результате сообщение об ошибке, отображаемое пользователю, когда он пытается добавить дублирующую запись, мне кажется проблемой безопасности, поскольку он отображает SQL, включая префикс таблицы.
Есть ли способ, чтобы остановить Joomla от отображения SQL в сообщении об ошибке?
Я попытался изменить настройки отчетов об ошибках в глобальном конфиге, но, насколько я могу судить, это никак не влияет ...
Пример сообщения:
ошибка
Сохранить не удалось со следующей ошибкой: Дублирующая запись 'Test' для ключа 'TestKey' SQL = INSERT INTO `jml_mycomp_tbl1` (` id`, `col1`,` ordering`, `state`,` creation_by`) VALUES ('0' , 'Test', '2', '1', '730')
источник
display_errors
(настройка PHP) должна быть отключена, и такие ошибки должны регистрироваться только в журнале ошибок на стороне сервера.Ответы:
Может быть, вы можете использовать команду try catch:
источник
JTable
лучшее решение было переопределитьcheck
метод, как в моем ответе.Поскольку кажется невозможным предотвратить такое поведение, я реализовал следующее решение. Добавьте дубликат проверки к
JTable
check
переопределению метода:источник
Вы должны изменить свой код, который делает вставку, чтобы сначала проверять дубликаты и возвращать правильную ошибку (ту, которую вы пишете) пользователю, а не полагаться на отображение фактической ошибки, возвращаемой MySQL.
источник
JTable
я был бы более склонен переопределитьcheck
метод и проверить там дубликат. Я хочу отобразить сообщение об ошибке для пользователя, только не с SQL в нем!