2017-06-14 127 views
1

我對寫入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();中沒有任何定義可以從某些特定查詢中獲取?請幫助我瞭解它的工作方式。

+0

我不太熟悉PDO。也許有人可以更好地解釋它。但是,你可以看到,這是一個來自PDO實例內部的實例變量('$ pdo')的一個getter。對於每個對數據庫的「INSERT」調用,它都會響應一個狀態信息。基於此,確定INSERT是否成功。從info獲得的id然後被存儲在一個變量中,並且每次下一次成功的INSERT調用都將被覆蓋。 – KarelG

+0

它只會在進行調用之前爲您提供最後一次插入的插入ID,從而生成自動遞增值。可能每個插入都會生成一個,但它只會是此次調用之前執行的最後一個。 –

+0

@NigelRen @NigelRen這就是我想要說清楚的....我從我的經歷中知道這一點,但只是想明確說明我在想什麼是正確的。如果這是一個答案,將給出+1;)感謝哥們;) –

回答

1

它只會給你在最後一次插入的插入ID之前進行調用,產生一個自動增量值。可能每個插入都會生成一個,但它只會是此次調用之前執行的最後一個。

+0

這就是我想說清楚....我知道這從我經驗,但只是想明確說明我在想什麼是正確的。 –