結果セットのフィールド情報をオブジェクトの配列で返す

# mysqli_result::fetch_fields

# mysqli_fetch_fields

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_fields -- mysqli_fetch_fields — 結果セットのフィールド情報をオブジェクトの配列で返す

### 説明

オブジェクト指向型

public function mysqli_result::fetch_fields(): array

手続き型

function mysqli_fetch_fields(mysqli_result `$result`): array

この関数は mysqli_fetch_field() 関数と同じ目的で 使用しますが、ひとつ違いがあります。一度にひとつずつフィールド情報を 取得するのではなく、複数のカラムの情報をオブジェクトの配列で返します。

### パラメータ

`result`
  手続き型のみ: mysqli_query()、mysqli_store_result()、mysqli_use_result()、mysqli_stmt_get_result() が返す mysqli_result オブジェクト。

### 戻り値

フィールド定義情報を含むオブジェクトの配列を返します。

オブジェクトのプロパティ
プロパティ | 説明
--- | ---
name | カラムの名前。
orgname | エイリアスが指定されている場合の、本来の名前。
table | フィールドが属するテーブルの名前 (演算をしていない場合)。
orgtable | エイリアスが指定されている場合の、本来のテーブル名。
def | 未使用。常に空文字列になります。
db | データベースの名前。
catalog | 未使用。常に `"def"` になります。
max_length | 結果セットにおけるフィールドの最大幅。PHP 8.1 以降では、この値は常に `0` です。
length | テーブルの定義で指定されているフィールド幅 (バイト単位)。 文字列型のカラムの場合、 値の長さは接続の文字セットによって異なります。 たとえば文字セットが `latin1`、 つまりシングルバイトの文字セットの場合、 クエリ `SELECT 'abc'` の値の長さは3になります。 一方で文字セットが `utf8mb4` の場合、 つまりマルチバイトの文字セットの場合、 文字は4バイトまでの長さをとります。値の長さは12になります。
charsetnr | フィールドの文字セット番号。
flags | フィールドのビットフラグを整数型で表す。
type | フィールドのデータ型。
decimals | 数値型のフィールドの場合の桁数。時間フィールドの場合は、秒単位の精度。

### 例

例1 オブジェクト指向型

    <?php
    $mysqli = new mysqli("127.0.0.1", "root", "foofoo", "sakila");

    /* 接続状況をチェックします */
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }

    foreach (array('latin1', 'utf8') as $charset) {

        // 文字セットを設定します。これは、バイト単位の長さなどいくつかの値に影響を及ぼします
        $mysqli->set_charset($charset);

        $query = "SELECT actor_id, last_name from actor ORDER BY actor_id";

        echo "======================\n";
        echo "Character Set: $charset\n";
        echo "======================\n";

        if ($result = $mysqli->query($query)) {

            /* すべてのカラムのフィールド情報を取得します */
            $finfo = $result->fetch_fields();

            foreach ($finfo as $val) {
                printf("Name:      %s\n",   $val->name);
                printf("Table:     %s\n",   $val->table);
                printf("Max. Len:  %d\n",   $val->max_length);
                printf("Length:    %d\n",   $val->length);
                printf("charsetnr: %d\n",   $val->charsetnr);
                printf("Flags:     %d\n",   $val->flags);
                printf("Type:      %d\n\n", $val->type);
            }
            $result->free();
        }
    }
    $mysqli->close();
    ?>

例2 手続き型

    <?php
    $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "sakila");

    /* 接続状況をチェックします */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    foreach (array('latin1', 'utf8') as $charset) {

        // 文字セットを設定します。これは、バイト単位の長さなどいくつかの値に影響を及ぼします
        mysqli_set_charset($link, $charset);

        $query = "SELECT actor_id, last_name from actor ORDER BY actor_id";

        echo "======================\n";
        echo "Character Set: $charset\n";
        echo "======================\n";

        if ($result = mysqli_query($link, $query)) {

            /* すべてのカラムのフィールド情報を取得します */
            $finfo = mysqli_fetch_fields($result);

            foreach ($finfo as $val) {
                printf("Name:      %s\n",   $val->name);
                printf("Table:     %s\n",   $val->table);
                printf("Max. Len:  %d\n",   $val->max_length);
                printf("Length:    %d\n",   $val->length);
                printf("charsetnr: %d\n",   $val->charsetnr);
                printf("Flags:     %d\n",   $val->flags);
                printf("Type:      %d\n\n", $val->type);
            }
            mysqli_free_result($result);
        }
    }

    mysqli_close($link);
    ?>

上の例の出力は以下となります。

    ======================
    Character Set: latin1
    ======================
    Name:      actor_id
    Table:     actor
    Max. Len:  3
    Length:    5
    charsetnr: 63
    Flags:     49699
    Type:      2

    Name:      last_name
    Table:     actor
    Max. Len:  12
    Length:    45
    charsetnr: 8
    Flags:     20489
    Type:      253

    ======================
    Character Set: utf8
    ======================
    Name:      actor_id
    Table:     actor
    Max. Len:  3
    Length:    5
    charsetnr: 63
    Flags:     49699
    Type:      2

    Name:      last_name
    Table:     actor
    Max. Len:  12
    Length:    135
    charsetnr: 33
    Flags:     20489

### 参考

- mysqli_num_fields() - 結果セットのフィールド数を取得する
- mysqli_fetch_field_direct() - 単一のフィールドのメタデータを取得する
- mysqli_fetch_field() - 結果セットの次のフィールドを返す

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open