PHP PDO lastInsertId()函数混乱

时间:2017-06-14 07:04:38

标签: php mysql pdo

我对写入lastInsertId()函数的方式感到困惑。比方说,我使用lastInsertId()函数进行了以下查询。

$myinsert = $pdo->prepare("INSERT INTO some_table(something)VALUE(:something");
$myinsert -> bindValue(':something', $something);
$myinsert -> execute();

$insert = $pdo->prepare("INSERT INTO table(something)VALUE(:something");
$insert-> bindValue(':something', $something);
$insert-> execute();
$lastId = $pdo->lastInsertId();

$stmt = $pdo->prepare("INSERT INTO another_table(something)VALUE(:something");
$stmt -> bindValue(':something', $something);
$stmt -> execute();

现在令人困惑的是,众所周知并且可以在此处看到,在声明$lastId = $pdo->lastInsertId();中没有提到是否从$myinsert查询或$insert查询中获取最后插入的ID或来自$stmt查询。那么它如何知道从何处获取ID?由于lastInsertId()函数位于$stmt查询之上,因此当$stmt $lastid查询$stmt时,它肯定不会从$insert查询中获取最后插入的ID尚未执行。但是它如何知道它必须从$myinsert查询而不是从$lastId = $pdo->lastInsertId();查询获取,因为在整个语句slice(0, your_count)中没有任何定义类似于从某某特定查询获取?请帮助我理解它的工作方式。

1 个答案:

答案 0 :(得分:1)

它只会在进行调用之前从最后一个插入中提供插入ID,从而生成一个自动增量值。可能每个插入都会生成一个,但它只是在此调用之前执行的最后一个插入。