Perl 解决此错误的正确方法是什么;t调用方法";fetchrow“U数组”;关于未定义的值
下面是我用于在crontab上运行脚本的perl代码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)=$
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
,则不会出现此问题。此外,不应将变量直接插入查询字符串中,应使用占位符。