MySQL中如何获取下一条插入的自增ID 或 刚刚插入的id
要立刻获得刚插入记录的id,该表必须有一个为一个AUTO_INCREMENT列生成的ID
$sql_addinfo = " insert into contact_info_group set contact_group_id='',contact_id='' " ; mysql_query ( $sql_addinfo ) ; echo mysql_insert_id () ;
mysql_insert_id – 取得上一步 INSERT 操作产生的 ID
int mysql_insert_id ( [resource link_identifier])
mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。
如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id() 返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。
注: MySQL 中的 SQL 函数 LAST_INSERT_ID() 总是保存着最新产生的 AUTO_INCREMENT 值,并且不会在查询语句之间被重置。
警告
mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
具体使用如下语句:
mysql_query(”SELECT LAST_INSERT_ID()”);
PS: 在插入数据时候可以这样写insert into xxx (col_a, col_b) values (11,22);select LAST_INSERT_ID()这样不就可以取到最近生成的ID了吗.
常常需要在编程的时候获取当前表的下一个自增的ID值,因为表可能被删除之后造成最大的Max(ID) + 1并不是下一条ID的值,所以需要使用其他办法。通过查询Mysql的文档,会发现Mysql里面有一个函数叫做getLastInsertID,用来获 取最后插入的表的ID值,但是对获取下一条插入的自增ID并没有太多帮助。
1. 方法1
插入一条测试记录,然后删除掉,获取ID。不再赘述。
2. 方法2
利用Mysql自带的一个函数语句 "
SHOW TABLE STATUS" ,可以获取当前数据库里的所有表的属性等信息,通常用来做数据库的优化和维护。如果需要指定某一张表的话,可以通过两种方法指定。
一种是网上给出来的:
show table status
like 'TableName '
另外就是常见的where语句
show table status where Name ='
TableName
'
得到的结果集里面有一列AUTO_INCREMENT,是一个Int值变量,获取之后就是下一个要插入的ID了。
我这里用的:
这里为insert的操作语句
//-------------------cms mysql_insert_id()-----------------------------
$result=$db->query("SELECT LAST_INSERT_ID() as id");
$data=$db->fetchNextObject($result);
$newid =$data->id;
//-------------------cms mysql_insert_id()-----------------------------