You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP MySQL中如何获取最后受影响行的ID?现有查询返回旧ID异常

如何在PHP MySQL中获取最后受影响行的ID?

嘿,先帮你理清核心问题:你现在用的select * from others是查询语句,根本不会对数据库做插入/更新这类修改操作,自然拿不到新插入行的ID啦!要获取最后插入的自增ID,必须先执行插入数据的SQL,再调用对应的方法才行。

下面分两种常用的PHP数据库扩展来给你演示:

1. 使用mysqli扩展

面向过程写法

假设你已经完成了数据库连接,$conn是你的连接句柄:

// 先执行插入操作
$insertQuery = "INSERT INTO others (column_name1, column_name2) VALUES ('val1', 'val2')";
mysqli_query($conn, $insertQuery);

// 获取最后插入的自增ID
$lastInsertedId = mysqli_insert_id($conn);
echo "最后插入的ID是:" . $lastInsertedId;

面向对象写法

// 初始化数据库连接
$conn = new mysqli("localhost", "your_username", "your_password", "your_database");

// 执行插入
$insertQuery = "INSERT INTO others (column_name1, column_name2) VALUES ('val1', 'val2')";
$conn->query($insertQuery);

// 获取ID
$lastInsertedId = $conn->insert_id;
echo "最后插入的ID是:" . $lastInsertedId;

2. 使用PDO扩展

如果项目用的是PDO,写法更简洁:

// 建立PDO连接
$dsn = "mysql:host=localhost;dbname=your_database;charset=utf8mb4";
$pdo = new PDO($dsn, "your_username", "your_password");

// 执行插入
$insertQuery = "INSERT INTO others (column_name1, column_name2) VALUES ('val1', 'val2')";
$pdo->exec($insertQuery);

// 获取最后插入的ID
$lastInsertedId = $pdo->lastInsertId();
echo "最后插入的ID是:" . $lastInsertedId;

为什么你之前会拿到错误的ID?

你之前执行的是select查询,这类查询不会触发自增ID的更新。mysqli_insert_id()或PDO::lastInsertId()返回的是上一次执行的修改类SQL(INSERT/UPDATE等)产生的自增ID,如果之前没有执行过有效插入,就会返回0;当你插入第二行后,这个方法会返回第一行的ID,直到你再次执行插入操作后才会更新。

重要提醒

一定要确保你的others表的主键字段设置了**AUTO_INCREMENT属性**,否则这些方法都无法返回正确的自增ID哦!

内容的提问来源于stack exchange,提问作者Nandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:37