直近のクエリの AUTO_INCREMENT カラムで生成した値を返す

# mysqli::$insert_id

# mysqli_insert_id

(PHP 5, PHP 7, PHP 8)

mysqli::$insert_id -- mysqli_insert_id — 直近のクエリの AUTO_INCREMENT カラムで生成した値を返す

### 説明

オブジェクト指向型

int|string $mysqli->insert_id;

手続き型

function mysqli_insert_id(mysqli `$mysql`): int|string

`AUTO_INCREMENT` 属性を持つカラムがあるテーブル上での `INSERT` や `UPDATE` クエリが生成したIDを返します。 `INSERT` 文が複数の行を変更する場合、 最初に自動生成された値を返します。

MySQL 関数 `LAST_INSERT_ID()` を使って `INSERT` や `UPDATE` を実行すると、 mysqli_insert_id() が返す値も変更されます。 `AUTO_INCREMENT` の値を生成するために `LAST_INSERT_ID(expr)` を使った場合、 生成された `AUTO_INCREMENT` の値ではなく、 最後の `expr` の値を返します。

直前のクエリが `AUTO_INCREMENT` の値を変更しなかった場合は、 `0` を返します。 クエリが値を生成した直後に、 mysqli_insert_id() をコールする必要があります。

### パラメータ

`link`
  手続き型のみ: mysqli_connect() あるいは mysqli_init() が返す mysqliオブジェクト。

### 戻り値

直前のクエリで更新された `AUTO_INCREMENT` フィールドの値を返します。接続での直前のクエリがない場合や クエリが `AUTO_INCREMENT` の値を更新しなかった場合は ゼロを返します。

現在の接続を使って発行されたクエリだけが、戻り値に影響します。 他の接続やクライアントが発行したクエリからは影響を受けません。

> 注意:

> もし数値が int の最大値をこえた場合、 文字列で結果を返します。

### 例

例1 $mysqli->insert_id の例

オブジェクト指向型

    <?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");

    $mysqli->query("CREATE TABLE myCity LIKE City");

    $query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
    $mysqli->query($query);

    printf("New record has ID %d.\n", $mysqli->insert_id);

    /* drop table */
    $mysqli->query("DROP TABLE myCity");

手続き型

    <?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");

    mysqli_query($link, "CREATE TABLE myCity LIKE City");

    $query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
    mysqli_query($link, $query);

    printf("New record has ID %d.\n", mysqli_insert_id($link));

    /* drop table */
    mysqli_query($link, "DROP TABLE myCity");

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

    New record has ID 1.

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