PHP PDO lastInsertId()函数混淆

PHP PDO lastInsertId()函数混淆,php,mysql,pdo,Php,Mysql,Pdo,我对lastInsertId()函数的编写方式感到困惑。例如,我使用lastInsertId()函数进行以下查询 $myinsert = $pdo->prepare("INSERT INTO some_table(something)VALUE(:something"); $myinsert -> bindValue(':something', $something); $myinsert -> execute(); $insert = $pdo->prepare("I

我对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();

现在的困惑是,正如大家都知道并且可以在这里看到的,在satement
$lastId=$pdo->lastInsertId()中
没有提到是从
$myinsert
查询还是从
$insert
查询或从
$stmt
查询获取最后插入的ID。那么它如何知道从哪里获取ID呢?由于,
lastInsertId()
函数位于
$stmt
查询上方,因此它肯定不会从
$stmt
查询中获取上次插入的id,因为
$lastid
已声明
$stmt
查询尚未执行。但它如何知道它必须从
$insert
查询中获取,而不是像整个语句
$lastId=$pdo->lastInsertId()那样从
$myinsert
查询中获取没有定义任何类似于从某某特定查询获取的内容?请帮助我了解它的工作方式。

它只会在调用生成自动增量值的前一次插入之前为您提供插入ID。可能每个insert都会生成一个,但它只会是在该调用之前执行的最后一个insert。

它只会在进行生成自动增量值的调用之前提供上次insert的insert ID。可能每个insert都会生成一个,但它只会是这次调用之前执行的最后一个。

我对引擎盖下的PDO不太熟悉。也许有人能更好地解释。但是,您可以从PDO实例内的实例变量(
$PDO
)中将其视为排序获取程序。对于每个对数据库的
INSERT
调用,它都会以状态信息进行响应。在此基础上,确定插入是否成功。然后,从信息中获取的id存储在一个变量中,并在下一次成功的
INSERT
调用中被覆盖。它只会在调用生成自动增量值之前,为您提供上一次插入的插入id。可能每个插入都会生成一个,但它只是在调用之前执行的最后一个。@NigelRen这就是我想说的。。。。我从我的经验中知道这一点,但我只是想表明我的想法是正确的。。如果这是一个答案,则会给出+1;)谢谢你,伙计;)我已经添加了它作为答案,如果您能将其标记为正确答案,将不胜感激:)@NigelRen accepted;)我不太熟悉引擎盖下的PDO。也许有人能更好地解释。但是,您可以从PDO实例内的实例变量(
$PDO
)中将其视为排序获取程序。对于每个对数据库的
INSERT
调用,它都会以状态信息进行响应。在此基础上,确定插入是否成功。然后,从信息中获取的id存储在一个变量中,并在下一次成功的
INSERT
调用中被覆盖。它只会在调用生成自动增量值之前,为您提供上一次插入的插入id。可能每个插入都会生成一个,但它只是在调用之前执行的最后一个。@NigelRen这就是我想说的。。。。我从我的经验中知道这一点,但我只是想表明我的想法是正确的。。如果这是一个答案,则会给出+1;)谢谢你,伙计;)我已经添加了它作为答案,如果您能将其标记为正确答案,将不胜感激:)@NigelRen accepted;)这就是我想说的。。。。我从我的经验中知道这一点,但我只是想说明我所想的是正确的……这就是我想说明的。。。。我从我的经验中知道这一点,但我只是想表明我的想法是正确的。。