我有一个庞大而复杂的系统,包含php
和javascript
代码,可以进行多次mysql
次查询。有没有办法回溯'每个mysql
查询到确切的代码行,这会产生查询?
在mysql
中,可以跟踪所有查询(向log
配置添加mysql
语句),但不会显示php
或{{1代码/模块/行执行了查询。是否可以找到每个javascript
查询的违规行?
答案 0 :(得分:1)
不,MySQL无法知道您正在拨打什么代码,类,函数或文件。它只是从运行代码的应用程序接收套接字连接,并接受输入,处理它并返回结果。
所有它知道的是它收到的数据,以及谁发送它。
您可以使用
查看有效连接和他们正在做的事情的简要说明SHOW PROCESSLIST;
您将获得类似于此的输出:
Id User Host db Command Time State Info
48 test 10.0.2.2:65109 test Sleep 4621
51 test 10.0.2.2:49717 test Sleep 5
52 test 10.0.2.2:49718 test Query 0 SHOW PROCESSLIST
通常,当人们想要记录查询时,它有点类似于
要为具有数百或数千个查询的系统执行此过程,您通常会发现创建了一个包装函数/类,它接受相应的参数,处理上面列出的查询,并返回结果。您可以在调用时将PHP Constants __FILE__
和__LINE__
传递给您的包装器方法,然后记录启动数据库调用的位置。
仅限伪代码
// Wrapper method
function query_wrapper($stm, $file, $line)
{
log_prequery($stm, $file, $line); // Log the query, file and line
$result = $stm->execute(); // Execute the query
log_postquery($result); // Log the result (and any errors)
return $result; // Return the result
}
// In your code where you're making a database query
$db = new Database();
$stm = $db->prepare("SELECT foo FROM bar");
query_wrapper($stm, __FILE__, __LINE__);