Perl 解决此错误的正确方法是什么;t调用方法";fetchrow“U数组”;关于未定义的值

Perl 解决此错误的正确方法是什么;t调用方法";fetchrow“U数组”;关于未定义的值,perl,Perl,下面是我用于在crontab上运行脚本的perl代码 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)=$

下面是我用于在crontab上运行脚本的perl代码

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";
}  

当我尝试运行这个脚本时,我得到一个错误
无法在第9行的未定义值上调用方法“fetchrow\u array”。当我试图在$sth中使用
我们的
关键字而不是
我的
关键字时,我没有得到任何错误。解决此错误的正确方法是什么。

您的
$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";
    }
}

您的
$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";
    }
}

如何使其在if块外部可见。如果我在之后使用elsif,我将使用相同的while来检索值;如果(…){…;$sth=$dbh->prepare($sql);}
@user2770039,您可以在此处阅读有关变量作用域的更多信息,以及如何使其在if块外部可见。如果我在之后使用elsif,我将使用相同的while来检索值;如果(…){…;$sth=$dbh->prepare($sql);}
@user2770039,你可以在这里阅读更多关于变量作用域的内容,这里我的答案是关于捕捉
prepare
上的错误,我错过了可能正确的变量作用域答案。如果你使用
use strict
,你就不会有这个问题。另外,您不应该直接在查询字符串中插入变量,您应该使用占位符。我的回答是关于捕捉
prepare
上的错误,现在已删除,我错过了可能正确的变量作用域答案。如果您使用
use strict
,则不会出现此问题。此外,不应将变量直接插入查询字符串中,应使用占位符。