4

我想知道究竟是如何lastInsertId()工作的。Atm,我正在使用它来获取插入行的 id,这样我就可以在代码的其他部分使用这个 id。例如:

$stmt = $db->prepare('INSERT INTO image_table (image_name, image_size) VALUES (:image_name, :image_size)'); 

$stmt->execute(array(
    'image_name' => $photoName,
    'image_size' => $image_size / 1024, 
    ));

$lastInsertId = $db->lastInsertId('yourIdColumn');

好的,我的问题是:

1)该脚本是否获取lastInsertId在该特定脚本中完成的 SQL 插入?

2)会发生什么,例如,3 个不同的用户将数据插入同一个表中,只是相差几纳秒。像这样的东西:

this script -> Inserts to row id 1
Another user -> Inserts to row id 2
Another user -> Inserts to row id 3

在这种情况下,返回值 1 是因为它是该脚本插入的行的最后一个 id,还是返回 3,因为这是脚本到达执行函数lastInsertId()的行时的最后一个 id ?lastInsertId()

4

1 回答 1

4
  1. 该脚本执行中最后一个sql 插入的 id (不是说,另一个用户的另一个竞争插入)。

  2. 当您有 3 个插入时,它会像它所说的那样为您提供lastInsertId(),最后一个,不是全部 3 个,不是 2 个......只是最后一个。通过单独运行插入并获取 id 来解决这个问题,或者如果您需要再次提取该数据,则只需根据插入条件进行搜索。由不同的用户/会话插入,请参阅答案#1,lastInsertId()适用于特定的用户/会话/执行,而不是所有操作。后台也发生了基本的 MYSQL 数据库临时操作,如果这是真的,它们会返回 id。

希望有帮助。

于 2014-01-17T16:53:55.287 回答