Documentation Home
MySQL 8.0 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 45.3Mb
PDF (A4) - 45.4Mb
PDF (RPM) - 40.9Mb
HTML Download (TGZ) - 10.5Mb
HTML Download (Zip) - 10.5Mb
HTML Download (RPM) - 9.1Mb
Man Pages (TGZ) - 208.4Kb
Man Pages (Zip) - 310.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual mysql_fetch_row()

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)


mysql_fetch_row() is a synchronous function. Its asynchronous counterpart is mysql_fetch_row_nonblocking(), for use by applications that require asynchronous communication with the server. See Section 28.7.12, “C API Asynchronous Interface”.

mysql_fetch_row() retrieves the next row of a result set:

The number of values in the row is given by mysql_num_fields(result). If row holds the return value from a call to mysql_fetch_row(), pointers to the values are accessed as row[0] to row[mysql_num_fields(result)-1]. NULL values in the row are indicated by NULL pointers.

The lengths of the field values in the row may be obtained by calling mysql_fetch_lengths(). Empty fields and fields containing NULL both have length 0; you can distinguish these by checking the pointer for the field value. If the pointer is NULL, the field is NULL; otherwise, the field is empty.

Return Values

A MYSQL_ROW structure for the next row, or NULL. The meaning of a NULL return depends on which function was called preceding mysql_fetch_row():


Errors are not reset between calls to mysql_fetch_row()

unsigned int num_fields;
unsigned int i;

num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
   unsigned long *lengths;
   lengths = mysql_fetch_lengths(result);
   for(i = 0; i < num_fields; i++)
       printf("[%.*s] ", (int) lengths[i],
              row[i] ? row[i] : "NULL");

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
  Posted by Vyacheslav Brover on March 29, 2011
Detecting timeout error for non-prepared "select for update" statement:

/* lock table LOG */
MYSQL mysql;
/* initialize mysql */
int status = mysql_query (& mysql, "select Id from LOG for update"); /* Waits for ~1 min., but status == 0 */
unsigned int err = mysql_errno (& mysql); /* err == 0 */
MYSQL_RES* res = mysql_use_result (& mysql);
err = mysql_errno (& mysql); /* err == 0 */
MYSQL_ROW row = mysql_fetch_row (mres);
err = mysql_errno (& mysql); /* err == 1205 (ER_LOCK_WAIT_TIMEOUT) */

For non-prepared DML statements error 1205 is detected by mysql_query().
For prepared statements error 1205 is detected by mysql_stmt_execute().