unsigned int mysql_num_fields(MYSQL_RES
*result)
または
unsigned int mysql_num_fields(MYSQL *mysql)
2 番目の形式は、MySQL 3.22.24
以降では動作しません。MYSQL*
引数を渡すには、この関数の代わりに
unsigned int mysql_field_count(MYSQL
*mysql)
を使用する必要があります。
説明
結果セットのカラム数を返します。
注意:
結果セットへのポインタまたは接続ハンドルへのポインタのどちらを使用しても、カラム数を取得できます。mysql_store_result()
または mysql_use_result()
が
NULL
を返した場合(結果セットポインタが返されなかった場合)は、接続ハンドルを使用します。この場合、mysql_field_count()
を呼び出すことによって、mysql_store_result()
が正常な処理として空の結果セットを返したのかどうかを判断できます。これによって、クライアントプログラムは、クエリが
SELECT
(または
SELECT
ライクな)ステートメントかどうかを知らなくても適切な処理を実行できます。以下の例に、この処理の実現方法を示します。
See 項11.1.12.1. 「mysql_query()
が正常に終了した後で
mysql_store_result()
が
NULL
を返す場合があるのはなぜか」。
戻り値
結果セットに含まれるフィールド数を表す unsigned 整数。
エラー
ありません。
例
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
を返すかどうかを調べる方法もあります。これは、0
を返すのは、何らかの異常が発生した場合だけだからです。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.