我在 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/