PHP学习笔记 返回上一步INSERT操作产生的ID

PHP学习笔记

2009-8-8

 

主题:返回上一步INSERT操作产生的ID

 

1 要点

1.1 函数mysql_insert_id()

有些时候在执行数据库的INSERT操作后需要知道其产生的ID(我用的MySQL,主键都是设的AUTO_INCREMENT,执行插入操作的时候不用指定ID的值而由数据库自行产生),这时候就可以使用PHP的函数mysql_insert_id()直接获得这个ID,非常方便。

但是有一点,如果在INSERT语句里面明确指出了具有AUTO_INCREMENT属性的ID列的值,那么函数将返回0,因为该ID值是由用户指定的,不是由数据库自动产生的。

PHP手册对该函数的描述如下:

说明

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()

 

1.2 MySQLAPI——LAST_INSERT_ID()

1.2.1 MySQL也提供了这么一个同样功能的API,它总是保存着最新产生的AUTO_INCREMENT值,并且不会在查询语句之间被重置,也就是说,在执行INSERT操作后,执行SELECTUPDATEDELETE语句都不会影响该API的返回值。

 

1.2.2 可以用 SELECT LAST_INSERT_ID(); 来查询LAST_INSERT_ID() 的返回值。

 

1.2.3 使用单条INSERT语句插入多条记录,LAST_INSERT_ID() 只返回插入的第一条记录产生的AUTO_INCREMENT值。

 

2 总结

2.1 在知道上面两种方法之前,我所用的方法就显得有点麻烦了。我的思路是这样的:

比如有一张表contents,它有3个字段idnamecontent,先执行INSERT操作

insert into contents (name,content) values (‘abc’,’test2’)

假设原先表中有一条记录(1,def,test1),那么执行INSERT操作后产生的id应该是2。我把name字段设为了UNIQUE,这样我可以用查询

select id from contents where name=’abc’

来获得我想要的那个id

这样确实可以得到正确结果,但是毕竟要将name字段设为UNIQUE,万一实际情况下允许name重复呢?所以上面的两种方法,尤其是第一种方法,真是帮了我忙了。

 

2.2 还有一个问题

phpMyAdmin中使用这个函数,怎么每次都返回0呢?明明之前的INSERT操作执行正确了的啊,现在还没有找到原因。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值