这是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号线
有时真的有帮助.至少它对我有用.
您可以使用DBI的ParamValues来获取参数值,但您不太可能在DBD中找到任何方法来获取SQL中实际的参数,因为它们大多是在解析SQL之后发送到数据库的。您可以查看DBIx::Log4perl以了解如何在错误处理程序中使用 ParamValues。您可能还会发现 DBIx::Log4perl 的某些部分很有用。