Note the $sth->finish() call inside the while loop.. That kills (so to speak) the $sth object. Thus, you execute(), call fetchrow_() once, then kill the object, then call fetchrow_ again, and it complains.sub get_name_and_lookup { my $dbh = shift; my ($sth, $stmt, $hostname, $id, $addr, $ipaddr); $stmt = qq {SELECT * from nt_machines ORDER BY name}; $sth = $dbh->prepare ($stmt); $sth->execute(); while (my $row = $sth->fetchrow_hashref()) { $row->{name} = $hostname; $row->{id} = $id; $addr = (gethostbyname($hostname))[4]; if ($addr) { $ipaddr = join(".", unpack("C4", $addr)); update_item($ipaddr,$id) } $sth->finish(); } }
Only call finish() if you want to discard the remaining results of an execute(). Since you while() through all the results, you have no need of the call at all in this code.
Hope that helps
In reply to Re: perl DBI help
by swiftone
in thread perl DBI help
by RayRay459
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |