Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

php

mysql

pdo

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?

like image 880
alexx0186 Avatar asked May 23 '12 00:05

alexx0186


2 Answers

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

like image 188
eggyal Avatar answered Sep 18 '22 22:09

eggyal


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 = '[email protected]' limit 1;
like image 45
Gohn67 Avatar answered Sep 17 '22 22:09

Gohn67