2010-01-19 14 views
5

Jak uzyskać ostatni wstawiony identyfikator za pomocą wkładki wielowarstwowej? Oto mój kod:Zend Framework pobierz ostatni identyfikator wstawki wielowierszowej wstawki za pomocą wykonaj

$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example 
$stmt = $contactsTable->getAdapter()->prepare($sql); 
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows 
$lastId=$stmt->lastInsertId(); 
echo '<br>Last ID: '.$lastId; 

Ponadto, istnieje metoda w ZF dostać następną insert id przed wkładki?

dzięki

Odpowiedz

10
$lastId=$contactsTable->getAdapter()->lastInsertId(); 

To działało.

0

że kod powinien działać, ale będzie Ci tylko identyfikator ostatniego wkładką.

można dostać następną AUTOINCREMENT z tego zapytania MySQL:

SELECT Auto_increment FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME='the_table_you_want'; 
+0

Dzięki solomongaby. Daje mi ten błąd: Błąd krytyczny: wywołanie niezdefiniowanej metody Zend_Db_Statement_Pdo :: lastInsertId() Wkładka działa dobrze. i daje mi wierszeDodano również grzywnę. Dziwne! – EricP

+0

Mam to! $ lastId = $ contactsTable-> getAdapter() -> lastInsertId(); Nadal nie wiem, dlaczego to nie działa w drugą stronę. – EricP

3

Więc tutaj jest pełny kod roboczych używam do tworzenia wkładkę wielorzędowe, coraz wiersze dodane i ostatni wstawiony id:

$contactsTable = new Contacts_Model_Contacts(); 
$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example 
$stmt = $contactsTable->getAdapter()->prepare($sql); 
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows 
$lastId=$contactsTable->getAdapter()->lastInsertId(); // last inserted id 
echo '<br>Last ID: '.$lastId; 
2

Alternatywne rozwiązanie. Przenieś kod SQL z kontrolerów i umieść je w modelach. Po to są.

Jeśli używasz modeli, możesz podać nazwę tabeli z kolumną automatycznej inkrementacji w zmiennej klasy.

protected $_name="<table_name>"; 

Następnie w metodzie klasy modelu, można uzyskać ID ostatnio wstawionego z

$insertID= $this->getAdapter()->lastInsertId(); 
Powiązane problemy