dirk
dirk

Reputation: 2296

PDO Last Insert ID always the right one?

I have the following code:

<?
$query =$db->prepare("INSERT INTO a_table (id, a_field) VALUES ('', (:a_field)");
$query->bindParam(":a_field", $a_value);
$query->execute();
$last_id = $db->lastInsertId('a_table');
?>

What I want to ask is this. Imagine when two people load the page at exactly the same time, is it a possible danger that the other persons query is inserted before the last ID is retrieved, mixing up the IDs?

Upvotes: 22

Views: 8029

Answers (3)

Andris
Andris

Reputation: 1442

Just faced following situation

Have file post.php which includes another file (like insert.php).

Whole code to insert in mysql is located in insert.php

In insert.php is code $id_of_inserted_row = $db->lastInsertId();

Then in insert.php is echo $id_of_inserted_row; which shows correct value.

But echo $id_of_inserted_row; in post.php shows incorrect value (as i see shows 7 numbers less than actual value). I do not understand why, just need to take into account.

Update

Sorry, above written was because inserted in two tables and mistakenly used the same $id_of_inserted_row = $db->lastInsertId(); for both tables.

So i have the same conclusion as in other answers: lastInsertId() gets id of last inserted row.

Faced situation. I inserted 2 rows in mysql. In such case i see that lastInsertId() is id of the first inserted row (not the last). Do not understand why... Found answer https://stackoverflow.com/a/12574752/2118559

Important If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only. The reason for this is to make it possible to reproduce easily the same INSERT statement against some other server.

Upvotes: 1

user1269636
user1269636

Reputation:

PDO will return you the last ID inserted by the current active database connection.

Upvotes: 6

Andrei
Andrei

Reputation: 574

No, this situation is impossible. Method $db->lastInsertId() returns last inserted id for this DB conection. In other page will be another connection and another last inserted id.

Upvotes: 26

Related Questions