Как я могу убедиться, что lastInsertId() PDO не совпадает с другой одновременной вставкой?

Я делаю регистрационную форму с INSERT SQL-запрос с использованием PDO. После этой вставки я хочу извлечь userid (автоинкремент, первичный ключ), который был только что создан, и INSERT это в другую таблицу (таблица "код подтверждения")

Но как я могу убедиться, что этот ИД пользователя не принадлежит второму пользователю, который зарегистрировался на 1/1000 секунды позже, чем первый пользователь?

Должен ли я найти способ блокировки стола? Должен ли я использовать транзакции?

2 ответа

Решение

lastInsertId() возвращает идентификатор последней строки, вставленной в это соединение, поэтому параллельные пользователи (с разными подключениями к базе данных) не будут вмешиваться.

Вы можете избежать этого, выполнив выборку по электронной почте или по уникальному полю. Это гарантирует, что вы получите правильный идентификатор пользователя.

Например:

select id from user_table where email = 'user@email.com' limit 1;
Другие вопросы по тегам