2013-11-05 44 views
0

我已創建包,以與數據庫連接的代碼下面給出:無法找到對象的方法「準備」通過包「DB_CONNECT」

#!/usr/bin/perl 
#Class 
package DB_CONNECT; 
#Constructor 
     sub new { 
         my ($class)[email protected]_; 
         my $self={}; 

         $self->{_odbc}="dbi:ODBC:SQLSERVER"; 
         $self->{_username}="xxx"; 
         $self->{_password}="xxx"; 
         $self->{_dbh}=my $dbh; 
         bless $self, $class; 
         return $self; 
       } 

###Method to open the database connection 
     sub db_connect 
       { 
       use DBI; 
       my ($self)[email protected]_; 
       $self->{_dbh}=DBI->connect($self->{_odbc},$self->{_username},$self->{_password},{PrintError => 1}) || die "Database connection not made: $DBI::errstr"; 

       return 1; 

       } 
1; 

下面一組的Perl代碼獲取數據從數據庫。

#!/usr/bin/perl 
#use strict; 

use Data::Dumper; 
use Asterisk::AGI; 
use DB_CONNECT; 
#require("/root/DB_CONNECT.pm"); 

my $agi = new Asterisk::AGI; 
my $db = DB_CONNECT->new(); 

my $sql = "EXEC usp_sms_ticket '".$status_data."'"; 
my $sth = $db->prepare($sql); 
$sth->execute(); 

$return = $sth->fetchrow(); 
$agi->set_variable('result',$return); 
print Dumper($return); 
$sth->finish; 
$db->disconnect; 

每當我執行我的Perl程序,我得到以下錯誤:

無法找到對象的方法「準備」通過包「DB_CONNECT」

+1

你沒有方法「準備」,是嗎?而且你不是從DBI對象繼承的,你正在使用它,所以你不會這樣。爲什麼不只有一個返回DBI句柄的函數? –

回答

0

好,你定義數據庫連接器在DB_CONNECT.pm中,但是,在文件中,沒有由prepare命名的方法。您的自定義對象與dbi方法的標準不同。所以用這種方法,你必須自己實現它的方法,或者你可以使用標準的DBI。你需要的是這裏 http://metacpan.org/pod/DBI#prepare

1

看起來你想發送preparedb->{'_dbh'}。您可以通過調用它明確地像$db->{'_dbh'}->prepare($sql),或者使用自動加載像這樣做:

use AutoLoader 'AUTOLOAD'; 
sub AUTOLOAD { 
    my $self = shift; 

    (my $method = $AUTOLOAD) =~ s/.*:://; 
    if($self->{'_dbh'}->can($method)) { 
     return $self->{'_dbh'}->$method(@_); 
    } 

    die "Unknown method '$method'\n"; 
} 

這將使它可以調用$db->prepare($sql),並有方法調用分派到$db->{'_dbh'}

但是,通過繼承DBI可能會更好地完成您嘗試執行的任何操作。這個on CPAN有很好的文檔。

+0

感謝您的重播,我得到以下錯誤無法在@INC中找到auto/DB_CONNECT/autosplit.ix(@INC包含:/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/usr /lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6/usr/lib/perl5 /site_perl/5.8.5/usr/lib/perl5/site_perl – user2932003

相關問題