mysql_insert_id()可以从另一个脚本的查询中获取值

时间:2012-04-11 22:25:44

标签: php mysql

mysql_insert_id()手册

  

因为mysql_insert_id()作用于上次执行的查询,所以一定要确保   在生成的查询之后立即调用mysql_insert_id()   值。

此声明未指明任何范围。它是服务器范围的价值吗?运行许多脚本的服务器或一个脚本的多个实例是否会返回mysql_insert_id()的值,该值不是由调用它的脚本执行的最后一次插入生成的?

3 个答案:

答案 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)

范围是每个连接。如果脚本的每次运行都打开一个单独的连接(通常会发生这种情况),那么它们将具有单独的范围。