2010-02-05 44 views
0

我第一次使用DBI(並且不長時間啓動Perl [2周]),我似乎無法從數據庫中獲得任何結果。下面是我有:爲什麼我的Perl DBI查詢不會在CGI腳本中返回任何結果?

if(defined($get{findAllPages}) && defined($post{ki})){ 

    my ($database, $hostname, $port, $password, $user); 

    $database = "#########"; 
    $hostname = "localhost"; 
    $password = "#########"; 
    $user = "###########"; 
    my $KI = $post{ki}; 

    # connect to the database 
    my $dsn = "DBI:mysql:database=$database;host=$hostname;"; 
    my $dbh = DBI->connect($dsn, $user, $password); 
    my $sth = $dbh->prepare("SELECT * FROM accounts WHERE KI = '" . $dbh->quote($KI) . "' ") or die "Could not select from table"; 
    $sth->execute(); 
    if($sth->rows != 0) { 
     my $ref = $sth->fetchrow_hashref(); 
     my $domain = $ref->{website}; 
     my $DB_username = $ref->{db_name}; 
     my $DB_password = $ref->{db_pass}; 
     $sth->finish(); 
     $dbh->disconnect(); 

     print "domian: " . $domain . "<br />\n"; 

     chomp(my $url = trim($domain)); 

既然這樣它會檢查,看是否KI是正確的,然後檢查其工作排量。我無法工作的那一點是從數組返回值;

my $ref = $sth->fetchrow_hashref(); 
my $domain = $ref->{website}; 
my $DB_username = $ref->{db_name}; 
my $DB_password = $ref->{db_pass}; 

如果任何人都可以讓我知道我要去哪裏錯誤,將不勝感激。

回答

2

嘗試使用DBI的錯誤處理來查看錯誤。請參閱Programming the Perl DBI, chapter 4(錯誤處理)或"DBI::mysql error handling" on Perlmonks以供參考。

+0

謝謝,你能告訴我,如果「或死」工作在線CGI文件,因爲我似乎無法得到它輸出到瀏覽器。 – 2010-02-05 08:40:34

+0

fetch()without execute()..所以即時猜測... my $ dsn =「DBI:mysql:database = $ database; host = $ hostname;」; my $ dbh = DBI-> connect($ dsn,$ user,$ password); my $ sth = $ dbh-> prepare(「SELECT * FROM accounts WHERE KI ='」。$ dbh-> quote($ KI)。「'」)或死「無法從表中選擇」; $ sth-> execute();如果($ sth-> rows!= 0){ my $ ref = $ sth-> fetchrow_hashref(); $ ref-> execute(); print $ DBI :: errstr; my $ domain = $ ref - > {website}; my $ DB_username = $ ref - > {db_name}; my $ DB_password = $ ref - > {db_pass}; $ sth-> finish(); $ dbh-> disconnect(); shuld做 – 2010-02-05 08:42:58

+0

如果你使用cgi,一種方法是使用CGI :: Carp。請參閱http://perldoc.perl.org/CGI/Carp.html#MAKING-PERL-ERRORS-APPEAR-IN-THE-BROWSER-WINDOW。順便說一下,在你的問題中發佈你的代碼,而不是在評論中,因爲格式不好。 – ghostdog74 2010-02-05 08:59:00

0

我經常做的時候我看不到是怎麼回事:

使用數據::自卸車;

my $ ref = $ sth-> fetch();

print Dumper $ ref;

您將看到數據結構佈局。有時候,這是一個索引到數組或散列的問題。

相關問題