How can I make sure that PDO’s lastInsertId() is not that of another simultaneous insert?

I am doing a signup form with an INSERT SQL query using PDO. After this INSERT, I want to extract the userid (auto incrementing, primary key) that was just created, and INSERT it into another table (a “confirmation code” table)

But how can I make sure that this userid is not that of a second user who registered 1/1000th of a second later that the first user?

Should I find some way of locking the table? Should I use transactions?


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

lastInsertId() returns the identifier of the last row inserted on that connection, so concurrent users (with different connections to the database) will not interfere.

Method 2

You can avoid this by doing a select by the email or some unique field. That will guarantee you get the correct user id.

For example:

select id from user_table where email = '<a href="" class="__cf_email__" data-cfemail="f386809681b3969e929a9fdd909c9e">[email protected]</a>' limit 1;

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x