MYSQL_RES *
mysql_use_result(MYSQL *mysql)
After invoking
mysql_real_query() or
mysql_query(), you must call
mysql_store_result() or
mysql_use_result() for every
statement that successfully produces a result set
(SELECT,
SHOW,
DESCRIBE,
EXPLAIN,
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
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!
You may not use
mysql_data_seek(),
mysql_row_seek(),
mysql_row_tell(),
mysql_num_rows(), or
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,
mysql_num_rows() accurately
returns the number of rows fetched.)
You must call
mysql_free_result() once you
are done with the result set.
mysql_use_result() resets
mysql_error() and
mysql_errno() if it succeeds.
-
Commands were executed in an improper order.
-
Out of memory.
-
The MySQL server has gone away.
-
The connection to the server was lost during the query.
-
An unknown error occurred.