Я разобрался, всем спасибо.
Дело в том что lastInsertId() не совсем адекватно работает, если после INSERT с автоинкрементом вам нужно узнать с каким ID добавлена запись, то нужно использовать lastInsertId() СРАЗУ после INSERT, иначе он будет возвращать 0, не важно что вы между делом используете запросы не связанные с INSERT.
Альтернатива - использование стандартной функции MYSQL - LAST_INSERT_ID()
в этом случае всё работает логично и после добавления записей через INSERT можно давать запросы не связаные с INSERT и получать ID последней записи.
(Добавление)
DeepVarvar пишет:Потому что так и есть. Если ты хочешь забрать последний автоинкрементный айдишник, то забирай его сразу после успешного выполнения запроса, т.к. в следующем любом запросе там будет ноль.
Еще не хватало чтобы за тебя пдо ванговала когда ж ты соизволишь забрать значение айдишника.
А что PDO не в состоянии запустить стандартый мускулевский LAST_INSERT_ID()?
Вот описание:
PDO::lastInsertId — Возвращает ID последней вставленной строки или последовательное значение
Если объект последовательности для name не задан, PDO::lastInsertId() вернет строку представляющую ID последней добавленной в базу записи.
Тут нигде не сказано что нельзя запускать никакие запросы.
Я несколько часов бился как рыба об лед, хотя делал всё по инструкции.
В инструкции написано черным по белому что lastInsertId выдает ID последней вставленной строки. Почему SELECT или SHOW STATUS должны скидывать в 0 ID то? После SHOW STATUS изменился последний ID? Нет. Вот и функция LAST_INSERT_ID() абсолютно корректно работает, не важно сколько селектов будет после добавления записи. (Отредактировано автором: 19 Мая, 2015 - 22:06:42)
|