2011-08-02 27 views
14

İlk defa MySQL ile PDO kullanıyorum, şu anda onunla oynamak.PDO lastInsertId işlemlerde çalışmıyor mu?

Şimdiye kadar işlemlerde sarılmış bir ekleme yapmaya çalıştığında ...

$this->dbh->beginTransaction(); 
// $sql query ran 
$this->dbh->commit(); 

echo $this->dbh->lastInsertId(); 

lastInsertId() Bir işlemin dışında aynı sorguyu çalıştırdığınızda, düzgün olsun ... 0 dönüyor Kimlik numarası döndü. Burada eksik olduğum bir şey mi var?

+4

Çağrısı Deneyin lastInsertId() için sormak gerekir. –

+3

Zor bir PDO alışkanlığından tökezlediniz, evet, bir 'acı' olan 'lastInsertId' _before_' commit' diye adlandırmanız gerekecek, ama hatırlanması kolay bir şey. – Wrikken

+1

@Wrikken: İşlemlerin genellikle birden çok "INSERT" ifadesini yürütmek için kullanılmasından dolayı, bunun kötü ve muhtemelen kasıtlı bir davranış olduğunu düşünmüyorum. Yani, 3 'INSERT' ifadelerinin bir işleminde ilk' INSERT' ifadesinin 'lastInsertId'ünü alabilmek için, her zaman bir' commit' yapmadan önce 'lastInsertId' olarak adlandırmanız gerekir. d diğer 2 'INSERT' ifadelerinden önce onu aramak zorunda. –

cevap

26

Sen bir transaction

taahhüt önce işlem yapılıyor önce

$this->dbh->beginTransaction(); 
// $sql query ran 
echo $this->dbh->lastInsertId(); 
$this->dbh->commit(); 
+0

Ayrıca, bu [http://www.php.net/manual/en/pdo.lastinsertid.php#85129] göz atın. – Starx

+0

Bu sadece beni pencereden dışarı atlamaktan kurtardı. TEŞEKKÜRLER! –