in reply to Number of rows affected by an update command

$updates += $dbh->do($insertstr, undef, ...parameter);
should do. Testing for "0E0" is only useful if you want to distingish between a failed statement, and a succesful statement that just happens to not modify anything. But you don't seem to be interested in that (and you don't need to).

Your $update is the sum of the number of updates that modified at least one row, and the number of failed updates.