2010-01-19 20 views
5

¿Cómo obtendré la última identificación insertada usando una inserción de varias filas? Aquí está mi código:zend framework obtiene la última identificación de inserción de la inserción de múltiples filas usando execute

$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; 

También, ¿existe un método en el ZF para obtener el siguiente ID de inserción para una inserción?

gracias

Respuesta

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

Esto funcionó.

0

que el código debería funcionar, pero sólo le obtener el ID de la última inserción.

se puede obtener el siguiente incremento automático con esta consulta mysql:

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

Gracias solomongaby. Me está dando este error: Error fatal: llamada al método indefinido Zend_Db_Statement_Pdo :: lastInsertId() La inserción funciona bien. y me da las filasAdición bien también. ¡Extraño! – EricP

+0

¡Lo tengo! $ lastId = $ contactsTable-> getAdapter() -> lastInsertId(); Todavía no sé por qué no funcionó a la inversa. – EricP

3

lo tanto, aquí es el código completo de trabajo que estoy usando para crear una inserción de múltiples filas, conseguir las filas añadidas y el último insertado 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

Una solución alternativa. Retire el código sql de los controladores y colóquelos en los modelos. Para eso están.

Si está utilizando modelos, puede dar el nombre de la tabla que tiene una columna de incremento automático, en la variable de clase.

protected $_name="<table_name>"; 

Luego, en el método de la clase modelo, se puede obtener la última Identificación del inserto de

$insertID= $this->getAdapter()->lastInsertId(); 
Cuestiones relacionadas