2017-06-14 6 views
1

Ich bin verwirrt mit der Art, wie lastInsertId() -Funktion geschrieben wird. Sagen wir zum Beispiel, ich habe die folgenden Abfragen mit der Funktion lastInsertId().PHP PDO lastInsertId() Funktion Verwirrung

$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(); 

Jetzt ist die Verwirrung, die wie jeder weiß und kann hier sehen, dass in den satement $lastId = $pdo->lastInsertId(); es keine wo erwähnt, ob die letzte Eingabe-ID aus $myinsert Abfrage oder $insert Abfrage oder aus $stmt Abfrage holen. Woher weiß es, woher die ID kommt? Da lastInsertId() Funktion über die $stmt Abfrage platziert wird, wird es definitiv nicht die zuletzt eingefügte ID aus $stmt Abfrage abrufen, als die $lastid wurde $stmt Abfrage wurde noch nicht ausgeführt wurde. Aber woher weiß es, dass es von $insert Abfrage abfragen muss und nicht von $myinsert Abfrage wie in der gesamten Anweisung $lastId = $pdo->lastInsertId(); gibt es nichts definiert wie aus so und so bestimmte Abfrage zu holen? Bitte hilf mir zu verstehen, wie es funktioniert.

+0

Ich bin nicht so vertraut mit PDO unter der Haube. Vielleicht kann es jemand besser erklären. Aber Sie können dies als einen Sorta Getter von einer Instanzvariable in der PDO-Instanz ('$ pdo') sehen. Für jeden 'INSERT'-Aufruf an die Datenbank antwortet dieser mit einer Statusinformation. Darauf basierend wird festgestellt, ob der INSERT erfolgreich ist oder nicht. Die aus der Information erhaltene ID wird dann in einer Variablen gespeichert und bei jedem nächsten erfolgreichen INSERT-Aufruf überschrieben. – KarelG

+0

Es gibt Ihnen nur die Einfüge-ID aus der letzten Einfügung vor dem Aufruf, die einen Auto-Inkrement-Wert generiert. Es kann sein, dass jede Einfügung einen erzeugt, aber es wird nur der letzte sein, der vor diesem Aufruf ausgeführt wurde. –

+0

@NigelRen das wollte ich klarstellen .... das wusste ich aus meiner erfahrung aber wollte nur klar machen, dass das was ich denke richtig ist .. wenn das eine antwort wäre hätte ich +1 gegeben;) danke kumpel ;) –

Antwort

1

Es gibt Ihnen nur die Einfüge-ID aus der letzten Einfügung vor dem Anruf, die einen Auto-Inkrement-Wert generiert. Es kann sein, dass jede Einfügung einen erzeugt, aber es wird nur der letzte sein, der vor diesem Aufruf ausgeführt wurde.

+0

das ist, was ich klar machen wollte .... Ich wusste das von meinem Erfahrung aber wollte nur klar machen, dass das, was ich denke, richtig ist .. –