1

也许我对 mysql_insert_id 有一些愚蠢的问题......

我需要在 mysql_query("INSERT INTO") 之后使用 mysql_insert_id 获取查询的最后插入 ID。

mysql_insert_id 检索上一个查询生成的Id,但我的问题是……

一个名为 test.php 的 php 文件,代码如下

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

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

实际上 Id 取回了 mysql_insert_id() ?我们与罕见的概率有关吗?

我不知道我是否可以理解...

4

3 回答 3

4

PHP手册指出 的值mysql_insert_id()仅返回最近生成的AUTO_INCREMENT值:

MySQL SQL 函数的值LAST_INSERT_ID()始终包含最近生成的AUTO_INCREMENT值,并且不会在查询之间重置。

MySQL手册声明它将AUTO_INCREMENT基于每个连接返回最后一个:

生成的 ID 在每个连接的基础上在服务器中维护。这意味着函数返回给给定客户端的值是为影响该客户端列的AUTO_INCREMENT最近语句生成的第一个值。此值不会受到其他客户端的影响,即使它们生成自己的值。这种行为确保每个客户端都可以检索自己的 ID,而不用担心其他客户端的活动,也不需要锁或事务。AUTO_INCREMENTAUTO_INCREMENT

此外,您应该停止使用mysql_函数,因为它们已被弃用

于 2012-09-17T21:14:18.827 回答
2

每个客户端都将坐在一个单独的连接上。mysql_insert_id()将根据传递的/当前连接获取id最后一个查询的。insert因此,您不必担心多个脚本会导致问题。

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

于 2012-09-17T21:15:33.273 回答
1

您从连接上的最后一个查询中取回自动增量 ID。它不会交叉连接,因此两个脚本同时运行没有任何危害。

旁注:如果可以选择,请使用 mysqli 或 PDO 库,而不是已弃用的 mysql 库。

于 2012-09-17T21:09:22.213 回答