也许mysql_insert_id()会返回意外的id

时间:2012-04-11 15:39:51

标签: php mysql

也许我的问题很愚蠢,但有一点我想知道mysql_insert_id()。在php.net上写如下:

  

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

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

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

1 个答案:

答案 0 :(得分: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