gpt4 book ai didi

php - 如何回溯一个mysql查询?

转载 作者:行者123 更新时间:2023-11-29 00:14:29 25 4
gpt4 key购买 nike

我有一个庞大而复杂的系统,由 phpjavascript 代码组成,它们进行许多 mysql 查询。有没有一种方法可以将每个 mysql 查询“回溯”到进行查询的确切代码行?

mysql 中,可以跟踪所有查询(将 log 语句添加到 mysql 配置),但它不显示是哪个phpjavascript code/module/line 进行了查询。是否可以为每个 mysql 查询找到有问题的行?

最佳答案

不,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

通常当人们想要记录查询时,它的发生有点类似于此

  1. 在运行查询之前,记录查询和任何参数
  2. 运行查询
  3. 记录查询的成功/失败以及任何错误

要对具有成百上千个查询的系统执行此过程,您通常会发现创建了一个包装函数/类,它接受适当的参数、按上面列出的方式处理查询并返回结果。您可以将包装器方法传递给 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__);

关于php - 如何回溯一个mysql查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com