mysqli_dump_debug_info
Узнайте, как mysqli_dump_debug_info() записывает отладочную информацию о соединении MySQLi в журнал ошибок MySQL. Синтаксис, возвращаемые значения и примеры.
PHP-функция mysqli_dump_debug_info() записывает низкоуровневую отладочную информацию о соединении MySQLi в журнал ошибок MySQL-сервера. На этой странице объясняется, что делает функция, когда она действительно полезна, её синтаксис в процедурном и объектно-ориентированном стилях, а также как интерпретировать создаваемый ею вывод.
Что делает mysqli_dump_debug_info()
mysqli_dump_debug_info() запрашивает у базовой клиентской библиотеки MySQL запись информации о внутреннем состоянии соединения в файл журнала сервера. Тип записываемых данных — открытые таблицы, кэшированные объекты, использование памяти соединением — предназначен для разработчиков самого MySQL, а не для повседневной отладки приложений. На практике вы обратитесь к ней только при поиске трудновоспроизводимой проблемы на уровне драйвера.
Функция принимает один аргумент — соединение MySQLi — и возвращает boolean: true в случае успеха и false в случае ошибки. Она не возвращает отладочный текст в ваш скрипт; информация поступает непосредственно в журнал сервера (расположение зависит от конфигурации MySQL, обычно это что-то вроде /var/log/mysql/error.log).
Синтаксис
Существуют два эквивалентных стиля, поскольку каждая функция MySQLi доступна как в виде процедурной функции, так и в виде метода объекта.
// Procedural style
mysqli_dump_debug_info(mysqli $mysql): bool
// Object-oriented style
$mysqli->dump_debug_info(): bool| Параметр | Описание |
|---|---|
$mysql | object соединения, возвращённый функцией mysqli_connect(). Обязателен в процедурном стиле. |
Возвращаемое значение — true, если запрос на запись информации выполнен успешно, и false в противном случае.
Пример процедурного стиля
Пример ниже открывает соединение, запрашивает отладочный дамп и сообщает, был ли запрос выполнен успешно. Замените учётные данные на собственные, чтобы запустить его на реальном сервере.
Запись отладочной информации (процедурный стиль)
<?php
// Throw exceptions instead of warnings on connection errors
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "user", "password", "my_database");
// Ask the client library to write debug info to the MySQL server log
if (mysqli_dump_debug_info($mysqli)) {
echo "Debug information was dumped to the server log.\n";
} else {
echo "Could not dump debug information.\n";
}
mysqli_close($mysqli);
?>После запуска откройте журнал ошибок MySQL-сервера, чтобы прочитать дамп. Сама функция лишь сообщает, был ли запрос принят — фактический диагностический текст находится в журнале.
Пример объектно-ориентированного стиля
Если вы предпочитаете объектно-ориентированный API MySQLi, вызовите dump_debug_info() непосредственно на object соединения.
Запись отладочной информации (объектно-ориентированный стиль)
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "user", "password", "my_database");
if ($mysqli->dump_debug_info()) {
echo "Debug information was dumped to the server log.\n";
} else {
echo "Could not dump debug information.\n";
}
$mysqli->close();
?>Оба стиля делают одно и то же; выбирайте тот, который соответствует остальному коду вашего проекта.
Когда использовать (и когда не стоит)
Обращайтесь к mysqli_dump_debug_info() только когда подозреваете проблему внутри самого уровня соединения MySQL — например, утечку подготовленных запросов или неожиданный рост потребления памяти при долгоживущем соединении. Для обычной отладки приложений почти всегда лучше подходят более целенаправленные инструменты:
- Чтобы прочитать сообщение об ошибке последнего неудавшегося вызова MySQLi, используйте
mysqli_error(). - Для проверки состояния и статистики соединения используйте
mysqli_get_connection_stats()или проверьте статус соединения. - Для общего обзора расширения смотрите главу PHP MySQLi.
Примечание: функция записывает данные в журнал сервера только тогда, когда MySQL-сервер собран с поддержкой отладки и настроен на её принятие. В стандартной производственной сборке она может незаметно не выполнять ничего полезного — это ещё одна причина считать её специализированным инструментом, а не инструментом для ежедневного использования.
Заключение
mysqli_dump_debug_info() — узкий, низкоуровневый диагностический инструмент, который записывает внутренние сведения о соединении MySQLi в журнал MySQL-сервера и возвращает boolean, указывающий на успешность запроса. Он ценен для расследований на уровне драйвера, но редко является подходящим инструментом для повседневной работы — для этого предпочтительнее mysqli_error(), статистика соединений или собственное журналирование ошибок PHP.