能mysql_insert_id()从另一个脚本的查询得到的值

问题描述:

mysql_insert_id()手册上说能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); 

$ ID1将在ID首先插入,$ ID2之后插入的ID。

是的,请参阅下面的文章: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。

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