DBI-> connect上的错误处理

时间:2011-07-11 11:30:49

标签: perl dbi

除了使用标准代码处理错误之外“无法连接:$ DBI :: errstr \ n”是否可以编写如下的自定义代码?

标准

$dbstore = DBI->connect($dsn, $user, $pw,
    {ora_session_mode => $mode, PrintError => 0, RaiseError => 0, AutoCommit => 0}) 
    or die "Unable to connect: $DBI::errstr\n";

定制

$dbstore = DBI->connect($dsn, $user, $pw,
    {ora_session_mode => $mode, PrintError => 0, RaiseError => 0, AutoCommit => 0});

if (!$dbstore)
{
    CUSTOM_LOG_HANDLER("Could not connect to database: $DBI::errstr");
    return;
}

样本标准代码:

#!/usr/bin/perl

# PERL MODULES WE WILL BE USING
use DBI;
use DBD::mysql;

# HTTP HEADER
print "Content-type: text/html \n\n";

# CONFIG VARIABLES
$platform = "mysql";
$database = "store";
$host = "localhost";
$port = "3306";
$tablename = "inventory";
$user = "username";
$pw = "password";

#DATA SOURCE NAME
$dsn = "dbi:mysql:$database:localhost:3306";

# PERL DBI CONNECT (RENAMED HANDLE)
$dbstore = DBI->connect($dsn, $user, $pw) or die "Unable to connect: $DBI::errstr\n";

谢谢你的时间。

1 个答案:

答案 0 :(得分:17)

您始终可以在DBI中使用自定义错误处理程序:

#!/usr/bin/perl

use strict;
use warnings;

use DBI;

sub handle_error {
    my $message = shift;
    #write error message wherever you want
    print "the message is '$message'\n";
    exit; #stop the program
}

my $dbh = DBI->connect(
    "dbi:SQLite:foo",
    "user",
    "pass",
    {
        PrintError  => 0,
        HandleError => \&handle_error,
    }
) or handle_error(DBI->errstr);

my $sth = $dbh->prepare("select * from doesntexist");

也就是说,您应该记录错误,对于Web应用程序,Web服务器的日志是有意义的。如果您担心网络日志中的噪音量,您应该集中精力修复错误,而不是通过删除信息来源使日志减少噪音。