in reply to Re^3: prepared statement
in thread prepared statement

If I try to diconnect from my connection, I have this warning message, while the statements are still active:
disconnect invalidates 1 active statement handle (either destroy state +ment handles or call finish on them before disconnecting)
The DBI manual tell us don't use $sth->finish statement.
How can I avoid to have that warn messagge?

Replies are listed 'Best First'.
Re^5: prepared statement
by Tux (Canon) on Aug 19, 2010 at 14:00 UTC

    You should not ->finish () select handles that are done reading:

    my $sth = $dbh->prepare ("select * from foo"); $sth->execute; while (my $ref = $sth->fetch) { print $ref->[0], "\n"; } # No need for $sth->finish;

    The safest way to never worry about this is to make those select loops have the smallest possible context, so the handle gets DESTROY'd on leaving scope:

    { my $sth = $dbh->prepare (...); $sth->execute; ... } # End-of-scope: $sth is destroyed

    It is usually advisable to finish update/insert/delete handles, as they have no obvious "done" state.

    { my $stu = $dbh->prepare ("update foo set blah = ? where c_foo = ?" +); my $sth = $dbh->prepare ("select c_foo, bar from brimble"); $sth->execute; while (my $r = $sth->fetchrow_hashref) { $stu->execute ($r->{bar}, $r->{c_foo}); } # no need for $sth->finish $stu->finish; # Good practice } # End of scope: clean up

    Enjoy, Have FUN! H.Merijn