我對寫入lastInsertId()函數的方式感到困惑。舉例來說,我對lastInsertId()函數有以下查詢。PHP PDO 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
或$stmt
查詢獲取最後插入的ID。那麼它如何知道從哪裏獲取ID?因爲lastInsertId()
函數被放置在$stmt
查詢的上方,所以它肯定不會從$stmt
查詢中獲取最後一個插入的ID,因爲當$lastid
被聲明時$stmt
查詢尚未執行。但是它如何知道它必須從$insert
查詢中獲取,而不是從$myinsert
查詢中獲取,因爲在整個語句$lastId = $pdo->lastInsertId();
中沒有任何定義可以從某些特定查詢中獲取?請幫助我瞭解它的工作方式。
我不太熟悉PDO。也許有人可以更好地解釋它。但是,你可以看到,這是一個來自PDO實例內部的實例變量('$ pdo')的一個getter。對於每個對數據庫的「INSERT」調用,它都會響應一個狀態信息。基於此,確定INSERT是否成功。從info獲得的id然後被存儲在一個變量中,並且每次下一次成功的INSERT調用都將被覆蓋。 – KarelG
它只會在進行調用之前爲您提供最後一次插入的插入ID,從而生成自動遞增值。可能每個插入都會生成一個,但它只會是此次調用之前執行的最後一個。 –
@NigelRen @NigelRen這就是我想要說清楚的....我從我的經歷中知道這一點,但只是想明確說明我在想什麼是正確的。如果這是一個答案,將給出+1;)感謝哥們;) –