Perl DBI:如何查看带有绑定值的失败查询?

w.k*_*w.k 6 perl dbi

这是DBI手册中的标准插入示例:

     my $query = q{
       INSERT INTO sales (product_code, qty, price) VALUES (?, ?, ?)
     };
     my $sth = $dbh->prepare($query) or die $dbh->errstr;
     while (<>) {
         chomp;
         my ($product_code, $qty, $price) = split /,/;
         $sth->execute($product_code, $qty, $price) or die ($query . " " . $dbh->errstr);
     }
     $dbh->commit or die $dbh->errstr;
Run Code Online (Sandbox Code Playgroud)

我修改了一下,所以我可以看到哪个查询失败(die ($query . " " . $dbh->errstr)).我仍然希望看到带有绑定值的查询(因为它已被执行).怎么弄?


编辑

顺便说一下,我发现了一种查看绑定值查询的尴尬方法:你必须在查询中出现语法错误.例如,如果我更改上面的查询:

     my $query = q{
       xINSERT INTO sales (product_code, qty, price) VALUES (?, ?, ?)
     };
Run Code Online (Sandbox Code Playgroud)

我按照自己的意愿得到了它:

DBD :: mysql :: st执行失败:您的SQL语法出错; 检查对应于你的MySQL服务器版本使用附近的正确语法手册"XINSERT INTO样品(产品代码,数量,价格)VALUES(" 1' ,'2’,'3’)"在1号线

有时真的有帮助.至少它对我有用.

boh*_*ica 3

您可以使用DBI的ParamValues来获取参数值,但您不太可能在DBD中找到任何方法来获取SQL中实际的参数,因为它们大多是在解析SQL之后发送到数据库的。您可以查看DBIx::Log4perl以了解如何在错误处理程序中使用 ParamValues。您可能还会发现 DBIx::Log4perl 的某些部分很有用。