Perl Tips(1)

一 Perl的数据库操作及错误捕捉机制
    Perl可以使用eval{};/if($@){}来捕捉错误.与c++和java的try/catch类似。
    这里着重介绍一下数据库编程下的错误捕捉。
    我这里使用的是DBI模块,数据库是MySQL。
  1  首先是数据库连接模块。
my $database_name = "test";
my $database_host = "192.168.0.1";
my $database ="dbi:mysql:dbname=$database_name;host=$database_host";
my $db_user = "root";
my $db_password = "root";
sub connectDB
 {
            my $database ="dbi:mysql:dbname=$db_name;host=$db_host".":"."$db_port";
            $dbh = DBI->connect($database,$db_user,$db_pswd,{RaiseError =>1,AutoCommit =>0,PrintError =>0}) or die "can't connect!: $DBI::errstr";
}

说明:
RaiseError =>1 用途:在DBI产生错误是抛出例外,使用eval时必须打开这个控制,打开错误产生,1为打开,0为关闭,
AutoCommit =>0 用途,自动事务处理。1为打开,0为关闭。
PrintError==>0 用途:DBI用警告方式显示错误信息,1为打开,0为关闭。
$DBI::errstr 为错误代码。

2  数据库操作部分:
         eval{
                $sth = $dbh->prepare( "SELECT  *  FROM test ;");
                my $rc = $sth->execute;
                while(@record_db_part= $sth->fetchrow_array){
                        #处理操作;
                    }
            };
            if($@) {
                $errhandel=substr($@,30,16);
                $err_connect=" Lost connection";
                if ($errhandel eq $err_connect) {
                    #错误处理a;
                }
                else{
                    #错误处理b;
                }
                die;
            }
            $sth->finish;
            $dbh->disconnect;
说明:
1 所有数据库操作部分写在eval{}块中。
2 eval抛出的错误存在$@中,错误处理写在if($@){}块中。
3 $sth为 statement handle,用来存储SELECT的结果
4
$dbh为database handle,用来操作数据库。
5 $sth->fetchrow_array 返回结果为数组。还有多种返回值可以选择。
    $sth->bind_columns(undef, /$fields1, /$fields2, /$fields3, /$fields4); 绑定字段
6 $dbh->prepare( 'SELECT * FROM test;'); 所有select型语句用prepare();CREATE,DELETE用do();
7 $sth->finish;最好加上,否则有时会报错:DBI::db=HASH(0x812938)->disconnect invalidates 1 active statement handle
(either destroy statement handles or call finish on them before disconnecting)
at ./pdfshorten.pl line 37.
8 其他常用属性。
    $rows = $sth->rows; 返回查询后的记录数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值