Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


23.8.7.21 mysql_fetch_row()

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

説明

結果セットの次の行を取得します。mysql_store_result() のあとで使用すると、mysql_fetch_row() は、それ以上取得する行がない場合に、NULL を返します。mysql_use_result() のあとで使用すると、mysql_fetch_row() は、それ以上取得する行がないか、エラーが発生した場合に NULL を返します。

行内の値の数は mysql_num_fields(result) によって指定されます。rowmysql_fetch_row() への呼び出しからの戻り値を保持している場合、その値へのポインタは、row[0] から row[mysql_num_fields(result)-1] までとしてアクセスされます。行内の NULL 値は NULL ポインタによって示されます。

行内のフィールド値の長さは、mysql_fetch_lengths() を呼び出すことによって取得できます。空のフィールドと NULL を含むフィールドはどちらも長さが 0 です。これらを区別するには、フィールド値のポインタをチェックします。ポインタが NULL である場合、フィールドは NULL です。そうでない場合、フィールドは空です。

戻り値

次の行の MYSQL_ROW 構造。それ以上取得する行がないか、エラーが発生した場合は NULL

エラー

mysql_fetch_row() の呼び出しと呼び出しの間に、エラーはリセットされません。

  • CR_SERVER_LOST

    サーバーへの接続がクエリー中に失われました。

  • CR_UNKNOWN_ERROR

    不明なエラーが発生しました。

MYSQL_ROW 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");
   }
   printf("\n");
}

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().
Sign Up Login You must be logged in to post a comment.