8

我的问题是一个相当简单的问题。我已经读过,检索我在 mysqli 中插入的行的 auto_increment/id 值的推荐方法是mysqli_insert_id()函数。但是,我不太熟悉并且有一个问题:(此时这都是理论上的)

出于这些目的(因此是 mysqli 位),这一切都将来自 PHP Web 应用程序。假设多个用户同时在应用程序上,并且在我插入行和调用的时间之间从不同的页面插入另一行mysqli_insert_id()

那会返回一个不正确的值,还是 MySQL 有某种功能来防止这种事情发生?还是我只是高估了这种情况的可能性?

谢谢你的时间。

4

2 回答 2

10

mysqli_insert_id()特定于数据库连接——它返回脚本调用最近插入的行的 ID,而不是任何其他 MySQL 客户端。因此,如果多个应用程序同时插入数据库,则不会发生冲突。

于 2013-08-16T01:12:55.080 回答
2

有两种方法可以调用此方法:

  1. 面向对象- $mysqli->insert_id;
  2. 程序(如您所指定) -mysqli_insert_id(mysqli $link)

在这两种情况下,最后一个插入 id 都与您与数据库建立的连接有关。出于解释的目的,尽管我相信面向对象的方法提供了更大的清晰度。考虑以下代码:

$mysqli = new mysqli('host','username','password','database');
// Insert into table with an AUTO INCREMENT field defined`
if ($result = $mysqli->query("INSERT INTO table (somefield) VALUES ('somevalue');")) {
   echo 'The ID is: '.$mysqli->insert_id;
}

$insert_id每当调用查询函数时,都会更新实例变量。因此,所持有的值仅在您的代码范围内,与其他进程与数据库的其他交互无关。

不过,有一些有趣的警告需要考虑。例如,如果您决定进行批量插入,例如

$mysqli->query("INSERT INTO table (somefield) VALUES ('somevalue'), ('anothervalue');")

它将返回插入的第一行的 ID,而不是最后一行。

为了进一步阅读PHP Doc提供了更多的说明。

于 2013-08-16T01:46:41.943 回答