Перейти к содержимому
Русский язык для Invision Community 5

Расширенная диагностика ошибок SQL

Здравствуйте.

 

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

 

Спасибо!

Рекомендованные сообщения

Обратите внимание

"Board url", указанный вами в профиле, некорректен, либо недоступен на данный момент. Пожауйста, заполните его, потому что он скорее всего потребуется при диагностике вашей проблемы.

Отключить логирования запросов, тогда ошибки будут сыпаться в бразузере. Для этого надо включить режим разработчика (константа IN_DEV в conf_global.php). Но так как в этом режиме обычно могут быть траблы в публичной части форума, проще всего открыть \ips_kernel\classDb.php и

 

выше: if ( $this->return_die == true )

добавить: $this->obj['use_error_log'] = 0;

 

Но лучше все же чтобы логи записывались, и на продакшене такое не делать.

  • Автор

Попробую, спасибо. В initdata.php видел несколько настроек по части дебага sql, думал, там можно что-то ещё включить.

IPS_SQL_DEBUG_MODE - показывает все запросы на странице, любая страница с параметром &debug=1.

IPS_SQL_DEBUG_LOG - логирует все запросы в файле.

  • Автор

IPS_SQL_DEBUG_LOG дополняет обычное логирование при ошибке? Т.е. это параллельная возможность?

Нет, он делает лог абсолютно всех запросов которые участвуют при генерации страницы. Полезно когда нужно изучить какие запросы, за сколько и где они выполняются.

Для этого надо включить режим разработчика

... или в \admin\sources\base\ipsRegistry.php

 

найти: IN_DEV ? 0 : 1;

заменить на: ( IN_DEV OR ipsRegistry::$settings['sql_debug'] ) ? 0 : 1;

 

Все равно $INFO['sql_debug'] не несет никакой пользы, эта переменная по моему тянется еще со времен старых версий, а сейчас она нигде не используется. Можно ее заюзать для показа в браузере.

  • Автор

@siv1987, $settings['sql_debug'] всё же используется в interface\board\index.php

 

//--------------------------------
// Set debug mode
//--------------------------------

$registry->DB()->setDebugMode( ipsRegistry::$settings['sql_debug'] == 1 ? intval($_GET['debug']) : 0 );

 

А что уж делает метод setDebugMode надо смотреть.

Регистр как переменная и установка параметров бд вне класса регистра - говорит что вряд-ли это скрипт, который участвует непосредственно при генерации страниц форума.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.