判断$dbh->do方法执行是否成功,怎么写呢?

判断$dbh->do方法执行是否成功,怎么写呢?

如题:
$dbh是一个DBI->connect 方法出来的对象,然后调用该对象的do方法去进行instert插入,怎么判断是否插入成功呢?

[Copy to clipboard] [ - ]
CODE:
my $dbh = DBI->connect( "DBI:mysql:TS", "admin", "admin12me",
                              { RaiseError => 1 } );

my $statement = "INSERT INTO ts VALUES
                  ( '$first', '$last', '$email', '$phone',
                     '$land', '$alk', '$idc', '$name' )";


   my $rows = $dbh->do( $statement );
#   我看了部分文档说如果do方法执行失败,将返回undef值,所以,下面做一个判断。
   if(defined($rows)){print 111;}else{print 2222;};

   $dbh->disconnect();
}

但是,111,2222都没有输出过,这里该怎么判断插入数据库是否成功呢
谢谢各位老师~
加入eval 防止程序出错退出,似乎是可以了。。。。
my $rows = eval {$dbh -do ($statement)};


QUOTE:
原帖由 webyuhang 于 2007-12-12 20:53 发表
加入eval 防止程序出错退出,似乎是可以了。。。。
my $rows = eval {$dbh -do ($statement)};

既然这样,你又何苦加那个 RaiseError => 1 呢?
不看文档,不系统地学习,照猫画虎,然后写出来的垃圾程序,让别人看了说是 Perl 只能写垃圾程序。
老大说的是 :)
我也是为了完成一个任务,刚刚接触PERL几天。。。请多见谅。。。。
我会好好学习的,感谢老大教导
sub SetSQLData()
{
     my $_dbName = shift(@_);  # 第一个参数是要操作的数据库的名字
     my $_query = shift(@_);      # 第二个参数是insert/update等不返回结果集的SQL语句
     my $_retval;

     my $_dbh = DBI->connect('dbi:mysql:'.$_dbName.':'.SYS_DB_ADDR, SYS_DB_USER, SYS_DB_PASS)
                 or die('cannot connect database : '.$DBI->error);   # 定义SYS_DB_XXX的常量
     $_retval = $_dbh->do($_query);  # 执行do

     if ($_retval == 0E0) { return 0; }   # 如果受影响的记录是0的话返回0
     if ($_retval == undef) { return -1; }   # $_dbh->do($_query)执行失败返回undef这里判断失败返回-1
       
     return $_retval;  # 执行成功了返回受影响的记录数
}