mysql_use_result() initiates a
result set retrieval but does not actually read the result set
into the client like
mysql_store_result() does.
Instead, each row must be retrieved individually by making calls
to mysql_fetch_row(). This reads
the result of a query directly from the server without storing
it in a temporary table or local buffer, which is somewhat
faster and uses much less memory than
mysql_store_result(). The client
allocates memory only for the current row and a communication
buffer that may grow up to
max_allowed_packet bytes.

On the other hand, you should not use
mysql_use_result() for locking
reads if you are doing a lot of processing for each row on the
client side, or if the output is sent to a screen on which the
user may type a ^S (stop scroll). This ties
up the server and prevent other threads from updating any tables
from which the data is being fetched.

When using mysql_use_result(),
you must execute
mysql_fetch_row() until a
NULL value is returned, otherwise, the
unfetched rows are returned as part of the result set for your
next query. The C API gives the error Commands out of
sync; you can't run this command now if you forget to
do this!