Używam PDO po raz pierwszy z MySQL, po prostu bawi się z nim w tej chwili.PDO lastInsertId nie działa przy transakcjach?
Do tej pory, gdy próbuję zrobić wkładkę owinięte w transakcjach ...
$this->dbh->beginTransaction();
// $sql query ran
$this->dbh->commit();
echo $this->dbh->lastInsertId();
lastInsertId() zwraca 0 ... kiedy uruchomić tę samą kwerendę poza transakcji, uzyskać właściwe zwrócono numer identyfikacyjny. Czy jest coś, czego tu brakuje?
nazywają go przed popełnieniem transakcji. –
Natknąłeś się na paskudny zwyczaj PDO, tak, musisz zadzwonić do 'lastInsertId' _before_' commit', co jest uciążliwe, ale łatwe do zapamiętania. – Wrikken
@Wrikken: Nie sądzę, że jest to paskudne i prawdopodobnie nawet zamierzone zachowanie, ponieważ transakcje są często używane do wykonywania wielu instrukcji 'INSERT'. Tak więc, aby uzyskać 'lastInsertId' z, powiedzmy, pierwszej instrukcji' INSERT' w transakcji 3 instrukcji 'INSERT', zawsze będziesz musiał wywołać' lastInsertId' przed wykonaniem 'commit', ponieważ ty ' Musimy wywołać to przed pozostałymi 2 instrukcjami '' INSERT'. –