如何获取两次不同INSERT语句的最后插入ID并分别存储
获取第二条INSERT语句的最后插入ID
其实这事很简单,mysqli提供的mysqli_insert_id()函数是跟当前数据库连接绑定的——每次执行完一条带自增主键的INSERT语句后,它都会返回这条插入操作生成的最新自增ID。所以你只需要在第二条INSERT执行成功后,再调用一次这个函数,就能拿到第二条的ID并存到变量里。
给你结合你的代码举个完整的实际例子:
// 第一条INSERT到resume表 $insertSQL = sprintf("INSERT INTO `resume` (`uID`,`profSummary`,`status`) VALUES (%s,%s,%s)", GetSQLValueString( test_input($row_user["uID"]), "int"), GetSQLValueString( test_input($_POST["proSum"]), "text"), GetSQLValueString( 1, "int")); mysqli_select_db($dbmain, $your_database_name); // 执行第一条INSERT $first_result = mysqli_query($dbmain, $insertSQL); // 存储第一条的插入ID $first_resume_id = mysqli_insert_id($dbmain); // 第二条INSERT(示例:假设插入到experience表,和resume做关联) $insertSQL2 = sprintf("INSERT INTO `experience` (`resumeID`, `company`, `jobTitle`) VALUES (%s,%s,%s)", GetSQLValueString($first_resume_id, "int"), // 可以直接用第一条的ID做关联 GetSQLValueString(test_input($_POST["company"]), "text"), GetSQLValueString(test_input($_POST["jobTitle"]), "text")); // 执行第二条INSERT $second_result = mysqli_query($dbmain, $insertSQL2); // 存储第二条的插入ID if ($second_result) { // 最好先判断插入是否成功,避免无效值 $second_experience_id = mysqli_insert_id($dbmain); // 这里就可以用$second_experience_id做后续操作了 } else { // 处理插入失败的情况,比如输出错误信息排查问题 echo "第二条插入失败:" . mysqli_error($dbmain); }
还有几个要注意的小细节:
- 必须确保第二条INSERT对应的表有自增主键字段(比如设为
AUTO_INCREMENT的id字段),不然mysqli_insert_id()会返回0,拿不到有效ID。 - 一定要在
mysqli_query()执行成功后再调用mysqli_insert_id(),如果插入失败,这个函数的结果可能不准确。 - 全程要用同一个数据库连接对象(你的代码里是
$dbmain),如果中途切换了连接,拿到的就不是对应操作的ID了。
内容的提问来源于stack exchange,提问作者oladepo wisdom
相关产品推荐
相关产品推荐

