ок, только что выяснил почему. Я публикую это как ответ, потому что, скорее всего, найдутся другие, которые столкнутся с той же проблемой: D
Так что PDO::lastInsertId();
будет пустым, если вы называете его после PDO::commit()
, что я и сделал, потому что использовал атомарные транзакции. Он должен быть вызван после execute () ...
Обратите внимание, что в приведенном выше коде у меня нет функции beginTransaction и commit (), поэтому код в моем вопросе на самом деле правильный, проблема была дома:)