2013-10-03 21 views
0

下面是我使用的腳本的Perl代碼要在運行crontab什麼是解決這個錯誤對一個未定義的值不能調用方法「fetchrow_array」正道

if($enable_family_members==0) 
{ 
    my $sql="select name from test where testid IN (". join(',', @set) . ')'; 
    my $sth = $dbh->prepare($sql); 
    $sth->execute or die "SQL Error: $DBI::errstr\n"; 
} 

while (my ($name)=$sth->fetchrow_array()) 
{ 
    print "name: $name"; 
} 

當我嘗試運行這個腳本我得到一個錯誤Can't call method "fetchrow_array" on an undefined value at line 9。當我嘗試使用our關鍵字而不是my關鍵字在$ sth中,我不會收到錯誤。什麼是解決這個錯誤的正確方法。

+1

我的答案是關於捕捉'準備'現在刪除錯誤,我錯過了大概正確的變量範圍答案。 –

+1

如果您使用'strict strict',則不會出現此問題。此外,你不應該直接插入變量到你的查詢字符串中,你應該使用佔位符。 – TLP

回答

3

您的$sth變量僅在if塊內可見。嘗試:

if($enable_family_members==0) { 
    my $sql="select name from test where testid IN (". join(',', @set) . ')'; 
    my $sth = $dbh->prepare($sql); 
    $sth->execute or die "SQL Error: $DBI::errstr\n"; 
    while (my ($name)=$sth->fetchrow_array()) { 
     print "name: $name"; 
    } 
} 
+0

如果阻止,我如何才能在外面看到它。如果我在使用相同的值的同時檢索值,則使用elsif。 – user2770039

+0

在我身外宣佈;如果(...){...; $ sth = $ dbh-> prepare($ sql);}' – Suic

+0

這適合我 – user2770039

相關問題