Я регулярно сталкиваюсь со следующей ситуацией; Я работаю над существующей системой, созданной на PHP, которая что-то делает, на самом деле довольно много, и обычно она состоит из большого количества кода. Теперь мне нужно расширить некоторые функции, отладить что-то и узнать, как система взаимодействует с MySQL-DB. Какие запросы выполняются в каком порядке.
Как я могу перехватить все запросы? Что-то вроде xdebug_start_trace для базы данных.
EDIT: Централизованная обработка запросов БД отсутствует. Вы найдете там все виды запросов. Поэтому мой вопрос направлен на некоторые функции каротажа. В принципе, это должно существовать, поскольку здравый смысл заключается в том, что что-то подобное может быть полезно.
EDIT2: Марио предложил решение, которое зависит от перезапуска mysql-deamon … no can can. Дополнительные предложения?
Вы можете использовать «общий журнал запросов MySQL», сначала запустив mysqld
с параметром --log=fn
. http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Если вы проходите PDO, вы можете расширить его до строк журнала или эхо-запросов.
<?php class PDODebug extends PDO { public function exec ($statement) { var_dump ($statement); // Or log to a file or use firePHP to log to the console return (parent::exec ($statement)); } public function query ($statement) { var_dump ($statement); // Or log to a file or use firePHP to log to the console return (parent::query ($statement)); } } ?>
Теперь в вашем коде создайте новый PDODebug, где вы создадите PDO, и выполняемые через него запросы будут регистрироваться. Если вы используете другой интерфейс базы данных OO (например, MySQLI), вы можете сделать что-то подобное.
Если вы используете не-OO-уровень доступа (например, функции mysql_ *), вам нужно будет вставить echo или var_dump или что-то еще перед каждым использованием функции mysql.