如何收集使用 DBI 执行语句时发生的错误?

How can I collect errors that occur while executing statements using DBI?

当查询失败时,我需要将错误信息添加到一个数组中。

这是我的执行台词:

 $txnQuery[$t] = $sth_Data->execute(@argsIn);

我正在尝试这样的事情:

$txnQuery[$t] = $sth_Data->execute(@argsIn) or die push(@Error,"SQL Error");

DBI module provides the PrintError, RaiseError, and HandleError options to tune how you want error handling to work. The first two are just flags, but HandleError 可以设置为一个子例程引用,它允许您准确地编写在发生错误时想要发生的事情

例如,您可以通过编写

来创建类似于RaiseError的行为
$dbh->{HandleError} = sub {
    my ($msg, $dbh, $ret) = @_;
    die $msg;
};

或者您可以像您描述的那样,通过推送到一个数组来累积发生的错误列表。像这样的,也许

my @errors;

$dbh->{HandleError} = sub {
    my ($msg, $dbh, $ret) = @_;
    push @errors, $msg;
};

如果您还想将消息打印到控制台,那么您可以 warn $msg 在您的错误处理程序中,或者您可以简单地保留 PrintError set

您可能希望为推入数组的每个项目添加时间戳,并且可以使用数据库句柄参数 $dbh$ret 做一些更精细的事情,即失败的 DBI 方法的 return 值