• Почему PDO::lastInsertId возвращает неверный ID при частых вставках в БД?

    @loktionov Автор вопроса
    Программист
    Провел тест на чистом PDO, поменял несколько версий, но результат тот же. Метод PDO::lastinsertid возвращает самый последний id для таблицы, как функция MSSQL IDENT_CURRENT()

    То есть, если между вставкой и получением id произошла вставка в другой сессии, то возвращается id из второй сессии.

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

    Кстати, используя выходной параметр в хранимой процедуре, не стоит забывать про инструкцию SET NOCOUNT ON, которая отключает вывод количества затронутых процедурой строк вместо выходного параметра.
    Ответ написан
    Комментировать