使用php mysql_insert_id() 函数将会返回错误值
应使用SELECT LAST_INSERT_ID();需紧跟insert语句。
以下是手册描述:
php:
mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
<font face="新宋体" color="#000000" size="5"><strong>mysql:</strong></font>
<strong><font face="新宋体"></font></strong>
<font face="新宋体" color="#800080" size="3">LAST_INSERT_ID([expr])</font>
<font face="新宋体" color="#800080">AUTO_INCREMENT</font>
列中的最后一个自动产生的值。查看章节 8.1.3.130 <font face="新宋体">mysql_insert_id()</font>
。 mysql> SELECT LAST_INSERT_ID(); -> 195最后产生的 ID 是以每个连接为基础在服务器端被维护的。它不可能被其它的客户端连接改变。如果你以一个非特殊值(即一个非
<font face="新宋体" color="#800080">NULL</font>
和非 <font face="新宋体" color="#800080">0</font>
的值)更新其它的 <font face="新宋体" color="#800080">AUTO_INCREMENT</font>
,它甚至也不会改变。 如果你在同一时间内以一个插入语句插入了许多记录行,<font face="新宋体" color="#800080">LAST_INSERT_ID()</font>
将返回第一个被插入行的值。这样做的原因是因为,这可能列容易地在其它服务器上再现同一条 <font face="新宋体" color="#800080">INSERT</font>
语句。 如果 <font face="新宋体" color="#800080">expr</font>
被作为一个参数传递给 <font face="新宋体" color="#800080">LAST_INSERT_ID()</font>
,那么函数将返回这个参数的值,并且被设置为 <font face="新宋体" color="#800080">LAST_INSERT_ID()</font>
返回的下一个值。这可被用于模拟一个序列: 首先创建一个表: mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0);然后这个表可以被用来以下面的方式产生序列值:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);你也可以不调用
<font face="新宋体" color="#800080">LAST_INSERT_ID()</font>
产生序列,但是以这种方式使用这个函数的作用就是,ID 值是在服务器端叙谈最后的自动产生值被维护的(是多用户安全的)。你可以检索这的新的 ID 值,就好像读取 MySQL 中任何正常的 <font face="新宋体" color="#800080">AUTO_INCREMENT</font>
值一样。举例来说,<font face="新宋体" color="#800080">LAST_INSERT_ID()</font>
(无任何参数) 将返回一个新的 ID。C API 函数 <font face="新宋体" color="#800080">mysql_insert_id()</font>
也可以用来得到这个值。 注意,由于 <font face="新宋体" color="#800080">mysql_insert_id()</font>
仅仅只能用于在 <font face="新宋体" color="#800080">INSERT</font>
和 <font face="新宋体" color="#800080">UPDATE</font>
语句的更新之后,所以在执行了其它的 SQL 语句(比如 <font face="新宋体" color="#800080">SELECT</font>
或 <font face="新宋体" color="#800080">SET</font>
)之后,你不能够使用 C API 函数检索到 <font face="新宋体" color="#800080">LAST_INSERT_ID(expr)</font>
的值。
No Responses (yet)
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.