2012-09-17 37 views
1

也许我有一些关于mysql_insert_id的愚蠢问题...如果mysql_insert_id同时调用不同的地方和不同的浏览器,会发生什么情况?

我需要在mysql_query(“INSERT INTO”)后面使用mysql_insert_id获取查询的最后一个插入ID。

mysql_insert_id先前查询检索生成的ID,但我的问题是...名为test.php的使用下面的代码

mysql_query("INSERT INTO table (FirstName, LastName) VALUES ('" . $_POST['FirstName'] . "', '" . $_POST['LastName'] . "'); ") 
$lastId = mysql_insert_id(); 
...continues some code using $lastId 

如果test.php的,会发生什么

一个PHP文件文件在同一时间从不同的地方和不同的浏览器调用? 或者如果包含INSERT INTO查询的其他php文件同时被调用会发生什么?

究竟是什么Id获取mysql_insert_id()? 我们必须处理一个难得的可能性吗?

我不知道我是否成为可以理解的......

+0

您可以使用事务来确保该ID不会更改。 – Kermit

回答

4

的PHP manual指出的mysql_insert_id()只返回最近生成的AUTO_INCREMENT值值:

MySQL的SQL函数LAST_INSERT_ID()总是包含最近生成的AUTO_INCREMENT值,并且不与重置的价值查询。

MySQL的manual状态下的它会返回根据每个连接的最后AUTO_INCREMENT

已生成保持在服务器上的每个连接的ID。这意味着该函数返回给定客户端的值是该客户端影响AUTO_INCREMENT的最新语句生成的第一个AUTO_INCREMENT值。此值不会受其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值。此行为可确保每个客户端都可以检索自己的ID,而不必关心其他客户端的活动,而无需锁定或事务。

另外,你应该停止使用mysql_功能,因为他们正在deprecated

+0

upvote .......... – arslan

1

您从您的网络连接上的最后一个查询返回的自动增量ID。它不会交叉连接,所以两个脚本不会同时运行。

备注:如果您有选项,请使用mysqli或PDO库,而不要使用已弃用的mysql libarary。

+0

非常感谢Matt S – AkisC

2

每个客户将坐在一个单独的连接。 mysql_insert_id()将基于传递的/当前连接获取最后insert查询的id。所以你不必担心多个脚本导致问题。

此外,从上面提供的代码中,您的脚本容易受到SQL注入攻击。逃避用户输入甚至更好,使用PDO/MySQLi。

+0

非常感谢你们所有人......帮助了我所有的答案......但只有一个我可以检查:/ ....再次感谢 – AkisC

相关问题