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.2.14.1. 「なぜmysql_store_result()時々返すNULL
の後mysql_query() 成功を返す」
を参照してください。
戻り値
結果セット中にあるカラムの数を表す無署名の整数。
エラー
なし。
例
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であったか否かのチェックに変えて実行することです。これは何かが故障した場合に起こります。
