Not all DBDs set the statement handle before a fetch, but MySQL does
But not always. If you create the statement with mysql_use_result rows() will no longer behave that way.
Note that the finish() is required here because you do no fetching. If one of the if's had a fetch, you'd omit the finish().
If one had a fetch() and fetch()ed to the end of the result set. If you fetch 10 rows out of an 11 row result set you will still need to call finish on the sth