有没有办法跟踪MySQL中的每个SQL查询?
我使用Doctrine ORM来构建实体并从数据库中获取它们,并希望看到Doctrine生成的查询。因此,当我刷新使用Doctrine ORM从网络中获取某些数据的网页时,我在哪里可以看到在数据库中执行的查询?
这可能吗?
答案 0 :(得分:0)
启用MySQL的general query log:
通用查询日志是mysqld正在执行的操作的一般记录。当客户端连接或断开连接时,服务器会将信息写入此日志,并记录从客户端收到的每个SQL语句。当您怀疑客户端中存在错误并希望确切知道客户端发送给mysqld的内容时,通用查询日志非常有用。
MySQL内部
set global general_log = 1;
set global log_output = 'table' /* so we can query it*/
select * from general_log /* to select */
truncate general_log /*if you got to much data*/
set global general_log = 0 /*to turn it off again*/
答案 1 :(得分:0)
如果您希望记录所有查询,请让此应用程序决定是否要记录查询并在MySQL端记录查询。
Doctrine在包中有一个内置的记录器接口和一个演示记录器。来自http://docs.doctrine-project.org/en/2.0.x/reference/configuration.html#sql-logger-optional:
<?php
$config->setSQLLogger($logger);
$config->getSQLLogger();
获取或设置用于记录Doctrine执行的所有SQL语句的记录器。记录器类必须实现Doctrine \ DBAL \ Logging \ SQLLogger接口。可以在Doctrine \ DBAL \ Logging \ EchoSQLLogger中找到使用echo和var_dump记录到标准输出的简单默认实现。