因为mysql_insert_id()作用于上次执行的查询,所以一定要确保 在生成的查询之后立即调用mysql_insert_id() 值。
此声明未指明任何范围。它是服务器范围的价值吗?运行许多脚本的服务器或一个脚本的多个实例是否会返回mysql_insert_id()的值,该值不是由调用它的脚本执行的最后一次插入生成的?
答案 0 :(得分:3)
mysql_insert_id()的范围是MySQL连接。不是user + password
,而是当前脚本的实际连接。 (注意,MySQL连接也可以是mysql_insert_id的参数)
如果你关闭并重新打开MySQL连接,mysql_insert_id()将不会返回前一个插入的id的id。
如果在添加之后插入了一个id,但是通过另一个脚本执行(我的意思是另一个连接),mysql_insert_id()将返回您的ID,而不是在您之后但在另一个连接中实际创建的ID。
示例:
$c1 = mysql_connect($srv, $usr, $pwd);
$c2 = mysql_connect($srv, $usr, $pwd);
$sql = "INSERT INTO table1 (col1, col2) VALUES('x', 'y') "
mysql_query($sql, $c1); // first insert
mysql_query($sql, $c2); // second insert
$id1 = mysql_insert_id($c1);
$id2 = mysql_insert_id($c2);
$ id1将首先插入id,$ id2之后插入id。
答案 1 :(得分:1)
是的,请参阅以下文章:How to Get the Unique ID for the Last Inserted Row
对于LAST_INSERT_ID(),维护最近生成的ID 服务器基于每个连接。它不会被另一个人改变 客户。如果您更新另一个AUTO_INCREMENT,它甚至不会更改 具有非魔法值的列(即,非NULL和值的值) 不是0)。使用LAST_INSERT_ID()和AUTO_INCREMENT列 同时来自多个客户端是完全有效的。每个客户 将收到客户端最后一条语句的最后插入ID 执行。
答案 2 :(得分:1)
范围是每个连接。如果脚本的每次运行都打开一个单独的连接(通常会发生这种情况),那么它们将具有单独的范围。