mysqli::$insert_id

mysqli_insert_id

(PHP 5, PHP 7, PHP 8)

mysqli::$insert_id -- mysqli_insert_id返回上次查询为 AUTO_INCREMENT 列生成的值

说明

面向对象风格

过程化风格

mysqli_insert_id(mysqli $mysql): int|string

返回有 AUTO_INCREMENT 属性的表执行 INSERTUPDATE 查询生成的 ID。对于多行 INSERT 语句,返回成功插入的第一个自动生成的值。

使用 LAST_INSERT_ID() MySQL 函数执行 INSERTUPDATE 语句也会修改 mysqli_insert_id() 返回的值。如果使用 LAST_INSERT_ID(expr) 生成 AUTO_INCREMENT 的值,将返回最后 expr 的值而不是生成的 AUTO_INCREMENT 值。

如果之前的语句没有修改 AUTO_INCREMENT 的值,则返回 0mysqli_insert_id() 必须在生成值的语句之后立即调用。

参数

mysql

仅以过程化样式:由 mysqli_connect()mysqli_init() 返回的 mysqli 对象。

返回值

上一个查询更新的 AUTO_INCREMENT 字段的值。如果连接上没有之前的查询或者查询没有更新 AUTO_INCREMENT 值。则返回 0。

只有使用当前连接发出的语句才会影响返回值。该值不受使用其它连接或客户端发出的语句的影响。

注意:

如果数字大于最大 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);

/* 删除表 */
$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));

/* 删除表 */
mysqli_query($link, "DROP TABLE myCity");

以上示例会输出:

New record has ID 1.