我想知道lastInsertId()
是如何工作的。目前,我在使用它来获取插入行的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)这个脚本是否获取了在特定脚本中进行的SQL插入的lastInsertId
?
2)例如,假设3个不同的用户在几个纳秒的时间内将数据插入到同一张表中。会发生什么?
this script -> Inserts to row id 1
Another user -> Inserts to row id 2
Another user -> Inserts to row id 3
在这种情况下,
lastInsertId()
会返回值1,因为它是由该脚本插入的最后一行的id,而不是在执行lastInsertId()
函数的那一行时的最后一个id,所以它不会返回3。
SELECT LAST_INSERT_ID()
(它们将返回两个不同的数字),然后在窗口1中插入一行,并在窗口2中选择SELECT LAST_INSERT_ID()
,以证明窗口2只能看到自己会话中生成的id。这个测试不需要精确的计时。 - Bill Karwin