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 mysql_num_fields()

unsigned int mysql_num_fields(MYSQL_RES *result)

代わりに MYSQL* 引数を渡すには、unsigned int mysql_field_count(MYSQL *mysql) を使用します。



結果セットまたは接続ハンドルへのいずれかのポインタからカラムの数を取得できます。接続ハンドルは、mysql_store_result() または mysql_use_result()NULL を返した (そのため、結果セットポインタがない) 場合に使用します。この場合、mysql_field_count() を呼び出して、mysql_store_result() が空でない結果を生成しているかどうかを判断できます。これにより、クライアントプログラムは、クエリーが SELECT (または SELECT に似た) ステートメントであったかどうかを知らなくても、正しいアクションをとることができます。ここに示す例では、これを実行する方法を説明しています。

セクション23.8.15.1「mysql_query() が成功を返したあとに mysql_store_result() が NULL を返すことがあるのはなぜか」を参照してください。





MYSQL_RES *result;
unsigned int num_fields;
unsigned int num_rows;

if (mysql_query(&mysql,query_string))
    // error
else // query succeeded, process any data returned by it
    result = mysql_store_result(&mysql);
    if (result)  // there are rows
        num_fields = mysql_num_fields(result);
        // retrieve rows, then call mysql_free_result(result)
    else  // mysql_store_result() returned nothing; should it have?
        if (mysql_errno(&mysql))
           fprintf(stderr, "Error: %s\n", mysql_error(&mysql));
        else if (mysql_field_count(&mysql) == 0)
            // query does not return data
            // (it was not a SELECT)
            num_rows = mysql_affected_rows(&mysql);

代替の方法 (クエリーが結果セットを返すべきであったことがわかっている場合) は、mysql_errno(&mysql) 呼び出しを mysql_field_count(&mysql) が 0 を返しているかどうかのチェックで置き換えることです。これは、何か異常があった場合にのみ発生します。

User Comments
  Posted by on May 24, 2005
In the code in this example you have to watch out for the meaning of mysql_query() results. In fact it seems like from the example an INSERT that failed would return from mysql_query() successfully. You would also seem to guess that the num_rows value would be 0 in that case. Nothing could be further from the trust.

In fact, in an INSERT that fails because of duplicate keys, you will see mysql_query() fail and mysql_errno will return ER_DUP_ENTRY. This is ia little "gotcha" in this code.
Sign Up Login You must be logged in to post a comment.