MYSQL_RES *mysql_use_result(MYSQL *mysql)
mysql_real_query(), you must
mysql_use_result() for every
statement that successfully produces a result set
CHECK TABLE, and so forth). You
must also call
mysql_free_result() after you
are done with the result set.
mysql_use_result() initiates a
result set retrieval but does not actually read the result set
into the client like
Instead, each row must be retrieved individually by making calls
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
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.
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
You may not use
mysql_affected_rows() with a
result returned from
mysql_use_result(), nor may you
issue other queries until
mysql_use_result() has finished.
(However, after you have fetched all the rows,
returns the number of rows fetched.)
You must call
mysql_free_result() once you are
done with the result set.
When using the
libmysqld embedded server, the
memory benefits are essentially lost because memory usage
incrementally increases with each row retrieved until
mysql_free_result() is called.
MYSQL_RES result structure.
NULL if an error occurred.