perl - 从 PERL 中的 DBI 语句转储准备好的 sql 查询

标签 perl debugging dbi dump

我在 Perl 中使用 DBI 连接到我的 PostgreSQL 数据库。
一切正常,但在我的调试(打印结果等)中,我无法查看 perls DBI 模块准备的查询是否真的正确。

我有这样的事情:

$sth->prepare( qq{SELECT * FROM company WHERE companyname LIKE ? AND city = ?});
$sth->execute( $name.'%', $city);

我无法看到调用执行后 sql 查询的外观,因为执行是将参数绑定(bind)到查询的最新步骤。

我想要 $sth->getLastExecutedQuery() 之类的东西或查看查询的外观。

在这种情况下,函数 getLastExecutedQuery()会返回:
SELECT * FROM company WHERE companyname LIKE 'Company Name%' AND city = 'City name';

有没有办法得到这个?它仅用于调试目的。

最佳答案

DBI 支持以下内容:
DBI->trace($tracefile_handle)方法(跟踪所有 DBI 交互),或 $dbh->trace($tracefile_handle)这将仅跟踪特定句柄上的交互。输出默认为 STDERR,但通过提供 $tracefile_handle ,您可以将输出显式发送到不同的文件(或仅使用 shell 重定向)。

DBD::pg 也支持 $h->trace('SQL');这必须由您的 DBD 驱动程序支持才能工作,但幸运的是 DBD::Pg 确实支持该功能。

DBI 的文档,位于 CPAN - DBI ,
对于 DBD::Pg,位于 CPAN - DBD::Pg真正为您提供有关追踪所需的所有信息。

关于perl - 从 PERL 中的 DBI 语句转储准备好的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885561/

相关文章:

c++ - 如何从交付给客户的 C++ 应用程序中获取调试信息?

ruby - 为什么我们在 Rails 记录器中使用 block 而不是字符串?

perl - 如何使用 Perl 进行屏幕抓取?

perl - 通过ssh将stdin/stdout重定向到远程主机/从远程主机重定向

debugging - 调试时无法从 CRM 插件访问外部 SQL 数据库

mysql - 如何使用 Perl DBI 查看 MySQL 是否在更新期间截断了字段

mysql - 为什么我尝试使用 Perl 的 DBD::mysql 时会出现错误?

perl - 从严格的 pragma 中免除一段 perl 代码

python - 如何从 Perl 调用 python 脚本?

Perl 下拉菜单和 Unicode