2011-05-23 3 views
0

j'ai donc essayé d'utiliser la méthode de l'insert() de Zend_Db_Adapter_Pdo_Mysql ....zend insert-cadre() et LAST_INSERT_ID() bousiller

puis après que je la commande SELECT LAST_INSERT_ID(); émis ....

mais alors pour une raison quelconque, cette commande renvoie toujours 0 au lieu de l'ID inséré réel ...

lorsque j'ai essayé d'utiliser la requête INSERT normale, puis obtenir le dernier ID d'insertion, ça fonctionne très bien, donc je suppose que c'est un zend cadre à visser ...

Est-ce que quelqu'un sait comment contourner cela?

l'insert() retourne seulement 1 si elle réussit plutôt que l'identifiant, donc la solution pour cela: last insert id with zend db table abstract ne semble pas fonctionner

Répondre

1

Zend_Db_Adaptor Documentation explique

Certains SGBDR support marques clés primaires auto-incrémentées. Une table définie de cette manière génère automatiquement une valeur de clé primaire lors d'un INSERT d'une nouvelle ligne. La valeur de retour de la méthode insert() n'est pas le dernier ID inséré, car la table n'a peut-être pas de colonne auto-incrémentée. Au lieu de cela, la valeur de retour est le nombre de lignes affectées (généralement 1).

Si votre table est définie avec une clé primaire auto-incrémentée , vous pouvez appeler la méthode lastInsertId() après l'insert. Cette méthode renvoie la dernière valeur générée dans la portée de la connexion de base de données en cours.

Alors ...

$id = $db->lastInsertId(); 

devrait fonctionner

2

Votre question est très claire. Néanmoins, je pense qu'au moins une partie d'un problème que vous avez est que vous confondez la méthode d'insertion de Zend_Db_Adapter_Abstract (ou Zend_Db_Adapter_Pdo_Mysql) avec celui de Zend_Db_Table_Abstract. Ces deux classes ont des méthodes qui s'appellent insert, mais elles fonctionnent différemment.

insert méthodes de Zend_Db_Adapter_Abstract renvoie le «le nombre de lignes affectées », tandis que insert de Zend_Db_Table_Abstract rendements « La clé primaire de la ligne insérée ». Le lien que vous avez fourni utilise l'insertion de Zend_Db_Table_Abstract. Cependant, il semble que vous utilisez insert de `Zend_Db_Table_Abstract. Pour cette raison, vous obtenez toujours 1 en retour.

0

En ZF2 vous pouvez utiliser:

$id = $this->lastInsertValue;