在php中使用mysqli扩展执行insert语句后,可以通过对象属性 $result->insert_id 获取最后插入的自增id,通过 $result->affected_rows 获取受影响的行数。这两个属性分别对应英文单词 "insert"(插入)和 "affected rows"(受影响行),读音分别为 /ɪnˈsɜːrt ɪd/ 和 /əˈfektɪd roʊz/。

如何获取最后插入的自增ID?
使用 insert_id 属性可以获取最近一次 INSERT 操作生成的自增 ID。该属性返回一个整数或字符串类型的值,具体取决于数据库驱动的实现。如果前一次查询不是 INSERT 操作,或者没有自增列,则可能返回 0 或空值。

$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->query("SET NAMES 'utf8'");
$sql = "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')";
if ($mysqli->query($sql) === TRUE) {
$lastId = $mysqli->insert_id;
echo "Last inserted ID: " . $lastId;
} else {
echo "Error: " . $mysqli->error;
}
$mysqli->close();
上述代码中,$mysqli->insert_id 在执行成功后的 INSERT 语句后立即生效。注意:只有在单线程环境下且未进行其他并发写入时,该值才准确反映当前会话的最后插入 ID。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
如何获取受影响的行数?
使用 affected_rows 属性可以获取上一条 SQL 语句所影响的记录数量。对于 INSERT、UPDATE 和 DELETE 操作,该值通常大于等于 0。若为 SELECT 查询,则始终返回 0。

$mysqli = new mysqli("localhost", "username", "password", "database");
$mysqli->query("SET NAMES 'utf8'");
$sql = "UPDATE users SET status = 'active' WHERE id > 10";
if ($mysqli->query($sql)) {
$rowsAffected = $mysqli->affected_rows;
echo "Rows affected: " . $rowsAffected;
} else {
echo "Error: " . $mysqli->error;
}
$mysqli->close();
此示例展示了如何通过 affected_rows 判断 UPDATE 是否真正修改了数据。若返回值为 0,说明没有匹配到符合条件的记录,也未发生实际更改。
当插入失败时 insert_id 和 affected_rows 的值是什么?
当 INSERT 或 UPDATE 语句执行失败时,insert_id 和 affected_rows 均不会更新,仍保留上一次成功操作的结果。因此,在调用这些属性之前应检查 query() 的返回值是否为 TRUE,以避免误读旧数据。

















