perl - 如何让 DBI 记录所有查询,包括参数?

标签 perl dbi

我想弄清楚遗留应用程序对我们的 mysql 数据库(复数)做了什么,因为我需要完全重构/替换它的一部分而不关心它是如何做的。我只对结果感兴趣。

目前我正在使用 DBI::ProfileDBI::ProfileDumper通过添加 $ENV{DBI_PROFILE} = "!Statement/DBI::ProfileDumper";。这向我展示了在命令行上运行 dbiprof dbi.prof 时的一堆查询,但看起来有点奇怪。

可能是我看错了报告。

#####[ 3 ]###########################################################
  Count         : 4
  Total Time    : 0.018930 seconds
  Longest Time  : 0.018881 seconds
  Shortest Time : 0.000005 seconds
  Average Time  : 0.004732 seconds
  Key 1         :

INSERT INTO orders (foo, bar) VALUES (1, 2)

为什么 4 显示为 Count?它在 orders 表中创建了两行,而不是 4 行。此外,它还显示了它正在执行的第一个插入操作的值。对于其他一些,它将 ? 保留在查询字符串中。

也许分析是错误的方法。我一直在考虑用猴子修补 DBI 来记录查询,但我不确定该去哪里。可能我可以添加一个日志记录功能到prepare,并添加到execute 以获取查询字符串和参数。

是否已经有类似的东西可供我使用?肯定有人想这样做?或者另一种方法?

我愿意接受任何类型的建议。

最佳答案

您想在级别 2 使用跟踪: https://metacpan.org/pod/DBI#TRACING

关于perl - 如何让 DBI 记录所有查询,包括参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19703521/

相关文章:

Perl 的菱形运算符 : can it be done in bash?

mysql - 将 perl 数组存储在内存中以供其他 perl 实例使用

r - 在 R 中使用 "and ' 正确引用 SQL 查询

perl - Perl v5.10.1 是否有内存泄漏或如何解释 valgrind

linux - 将 perl 模块复制到其他机器

mysql - Perl DBI::fetchrow_array() 为 NULL 给出空而不是 undef

perl - 使用 prepare 和 execute 避免 SQL 注入(inject)

perl - 如何在 Log4perl 中仅记录 INFO 级别?

c - Perl:如何将所有内联 C 代码放入单独的文件中?

regex - Perl 正则表达式/嵌套短语的替换