3

也许我的问题很愚蠢,但我想知道一件事mysql_insert_id()。在 php.net 上是这样写的:

检索上一个查询(通常是 INSERT)为 AUTO_INCREMENT 列生成的 ID。

mysql_insert_id()如果在脚本到达使用另一个脚本在数据库中插入内容的行之前,此函数将输出什么?

据我所知,它将返回最后一个插入项目的 id (从哪里开始无关紧要)。如果我是对的,我想知道如何避免这个问题,但mysql_insert_id()在执行插入查询时立即使用(因为仍然有一点机会陷入“麻烦”)。

4

1 回答 1

3

它将返回当前会话中插入的最后一行的 id,因此您无需担心。实际上,您将链接标识符作为参数传递,否则它默认为最后打开的链接。从文档

MySQL 连接。如果未指定链接标识符,则假定由 mysql_connect() 打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像 mysql_connect() 没有参数被调用一样。如果未找到或建立连接,则会生成 E_WARNING 级别错误。

所以如果你有

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());

这总是正确的(当然,如果 mytable 有一个 AUTO_INCREMENT 列),因为它检索会话中最后生成的 id。如果同时另一个用户运行完全相同的查询,他将有一个不同的会话,他会正确地得到他的 id

于 2012-04-11T15:41:54.653 回答