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
相关产品推荐
相关产品推荐

