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


Could mysql_insert_id() get a value from another script's query

>mysql_insert_id() 的手册说

由于 mysql_insert_id() 作用于上次执行的查询,因此请确保 在生成mysql_insert_id 价值。

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

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

$id 1 是首先插入的 id,$id 2 是之后插入的 id。

是的,请参阅以下文章: 如何获取最后插入行的唯一 ID

对于 LAST_INSERT_ID(),最近生成的 ID 保留在 基于每个连接的服务器。它不会被另一个改变 客户。如果您更新另一个AUTO_INCREMENT,它甚至不会改变 具有非魔术值的列(即,不是 NULL 的值和 不是 0)。使用 LAST_INSERT_ID() 和AUTO_INCREMENT列 同时来自多个客户端是完全有效的。每个客户端 将收到该客户端最后一个语句的最后插入 ID 执行。

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