After an error occured on the MySQL connection, but before throwing it, clear the error. This prevents the error from being rethrown the next time something is done with the connection, because MySQL remembers all errors until the next succesful server communication. Also test for this.
Fix the error checkers: because they were temporary, they were destructed right on the spot, so the after-error check never worked correctly. They now have names, so they are destructed at end of scope, fixing the problem.
Add an explicit post-error check to query(), and return void since we check if the int is non-error.
Add reference to documentation to a potentially confusing part of UseResult.
Implement non-SELECT non-prepared queries for simple queries like "DROP TABLE x". Rename query() to select_query() and add a new query() that doesn't return a resultset. Both functions check if they were called with the right type of query, by checking the field_count(), and throw if they weren't, bringing the connection back into a safe state.