也许我的问题很傻,但有一件事我想知道。在php.net上编写如下:
检索由上一个查询(通常是insert)为自动递增列生成的id。
如果在脚本到达使用mysql_insert_id()
的行之前,另一个脚本在数据库中插入某些内容,那么这个函数的输出是什么?
据我所知,它将返回最后一个插入项的id(不管从哪里)。如果我是对的,我希望知道如何避免这个问题,但是在执行insert查询时立即使用mysql_insert_id()
(因为仍然有一点可能陷入“麻烦”)。
最佳答案
它将返回在当前会话中插入的最后一行的id,因此您无需担心。实际上,您将链接标识符作为参数传递,否则它默认为最后打开的链接。从文件中
MySQL连接。如果未指定链接标识符,则
假设是mysql_connect()打开的最后一个链接。如果没有这种联系
找到后,它将尝试创建一个,就像使用
没有争论。如果未找到或建立连接,则会出现E_警告
生成级别错误。
所以如果你有
$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
关于php - 也许mysql_insert_id()会返回意外的id,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10109289/