当查询失败时,我需要向数组添加一条错误消息。如何收集使用DBI执行语句时发生的错误?
这是我执行行:
$txnQuery[$t] = $sth_Data->execute(@argsIn);
我想是这样的:
$txnQuery[$t] = $sth_Data->execute(@argsIn) or die push(@Error,"SQL Error");
当查询失败时,我需要向数组添加一条错误消息。如何收集使用DBI执行语句时发生的错误?
这是我执行行:
$txnQuery[$t] = $sth_Data->execute(@argsIn);
我想是这样的:
$txnQuery[$t] = $sth_Data->execute(@argsIn) or die push(@Error,"SQL Error");
的DBI
module提供PrintError
,RaiseError
,并HandleError
选项调整要如何处理错误上班。前两个都只是标志,但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
设置
您可能需要添加一个时间戳每个项目,你推到阵列上,并有可能使用数据库句柄参数$dbh
和$ret
,这是失败的返回值方法
谢谢先生,那是行得通的,我正在阅读其他DBI错误管理和'eval'这个句子。 –
@BernadoBorunda:'eval'用于防止终止程序的致命错误。所以在这种情况下,你必须设置'RaiseError'来使错误成为致命的,然后使用'eval'来防止你的程序死亡,这似乎有点荒谬。另外,你必须在每个数据库操作上使用'eval',而为'HandleError'指定一个子例程只需要完成一次 – Borodin
你正在尝试,并...发生了什么?脚本正在死亡? –
打印此错误:1在E:\ StatementJSON.pl行395.我认为或只死在页面打印,它不能做任何其他行动。 –
您看到的'1'可能是'@ Error'中的元素数量,这是'push'返回的值。不过,我不明白这个问题是什么。如果你不想让脚本退出,请不要调用'die'。 –