Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-07-2008 06:37:17

kiminox
Membre
Date d'inscription: 15-01-2008
Messages: 37

[Zend_Db_Adapater_Abstract][1.5] table->update[RESOLU]

Bonjour,

J'ai un problème pour mettre à jour une table en utilisant la méthode update() de l'objet Zend_Db_Table.
En dépliant le code source, je m'aperçois que dans la classe Zend_Db_Adapater_Abstract, la méthode update foire (ligne 526 du fichier Zend/Db/Adapter/Abstract.php)
En y regardant de plus près (vive zend_studio pour le débug!), cette méthode appelle Zend_Db_Statement->execute($params) qui utilise Zend_Db_Statement_Mysqli->_execute($params).
Les paramètres sont corrects (nom des champs de la table + valeur) : le pb semble provenir du membre _smt de Zend_Db_Statement_Mysqli qui est null. En effet, lors de l'appel de la méthode Zend_Db_Statement_Mysqli->_execute($params), un test est effectué sur $this->_smt pour vérifier qu'il n'est pas nul avant d'exécuter la requête. PB : ce membre est null!! Donc la requête d'update n'est jamais exécutée.
De plus, aucune erreur n'est retournée : il faut bcp de recherche pour comprendre le pb.
Quelqu'un a t il eu ce pb ou une idée?
J'ai probablement oublié un truc
merci

Yoong

Dernière modification par kiminox (15-07-2008 22:15:56)

Hors ligne

 

#2 15-07-2008 07:11:40

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_Db_Adapater_Abstract][1.5] table->update[RESOLU]

pourrais tu nous donner ton code d'appel comment du créé ton objet et comment tu t'en sert
a+JYT

Hors ligne

 

#3 15-07-2008 21:38:53

kiminox
Membre
Date d'inscription: 15-01-2008
Messages: 37

Re: [Zend_Db_Adapater_Abstract][1.5] table->update[RESOLU]

Pour résumer l'appel :
- dans l'action :
initialisation de l'objet $table, héritant de Zend_Db_Table.
requete pour récupérer le contenu de la table à modifier.
A la fin, l'objet est sauvegardé en session.
Lors de la soumission du formulaire : récupération de l'objet en session et on peuple son contenu avec les données du formulaire
- dans mon service (oui j'utilise une couche service qui se fonde sur des business object, class héritant de Zend_Db_Table) :
après des contrôles métier, je fais simplement $table->update($dataNotNull, $where); où $dataNotNull est un tableau de nomChamp->valeur et $where=$table->getAdapter()->quoteInto('champClePrimaire = ?', $idRecupereDuForm);
Exactement ce qu'indique la doc : http://framework.zend.com/manual/fr/zen … ble.update
Mais j'ai sans doute oublié un truc.
Je te donne aussi mes logs d'erreur :
2008-07-15T21:48:15+02:00 ERR (3): [2008-07-15 21:48:15]-[N°2][Alerte] : mysqli::real_escape_string() [<a href='function.mysqli-real-escape-string'>function.mysqli-real-escape-string</a>]: Couldn't fetch mysqli => D:\yoong\sites\gdb\lib\Zend\Db\Adapter\Mysqli.php - 102
2008-07-15T21:48:15+02:00 ERR (3): [2008-07-15 21:48:15]-[N°2][Alerte] : mysqli::real_escape_string() [<a href='function.mysqli-real-escape-string'>function.mysqli-real-escape-string</a>]: Couldn't fetch mysqli => D:\yoong\sites\gdb\lib\Zend\Db\Adapter\Mysqli.php - 102
2008-07-15T21:48:15+02:00 ERR (3): [2008-07-15 21:48:15]-[N°2][Alerte] : mysqli::prepare() [<a href='function.mysqli-prepare'>function.mysqli-prepare</a>]: Couldn't fetch mysqli => D:\yoong\sites\gdb\lib\Zend\Db\Statement\Mysqli.php - 77
2008-07-15T21:48:15+02:00 ERR (3): [2008-07-15 21:48:15]-[N°2][Alerte] : Zend_Db_Statement_Mysqli::_prepare() [<a href='function.Zend-Db-Statement-Mysqli--prepare'>function.Zend-Db-Statement-Mysqli--prepare</a>]: Couldn't fetch mysqli => D:\yoong\sites\gdb\lib\Zend\Db\Statement\Mysqli.php - 79
2008-07-15T21:48:15+02:00 ERR (3): [2008-07-15 21:48:15]-[N°2][Alerte] : Zend_Db_Statement_Mysqli::rowCount() [<a href='function.Zend-Db-Statement-Mysqli-rowCount'>function.Zend-Db-Statement-Mysqli-rowCount</a>]: Couldn't fetch mysqli => D:\yoong\sites\gdb\lib\Zend\Db\Statement\Mysqli.php - 358



Yoong

Dernière modification par kiminox (15-07-2008 21:48:41)

Hors ligne

 

#4 15-07-2008 22:15:37

kiminox
Membre
Date d'inscription: 15-01-2008
Messages: 37

Re: [Zend_Db_Adapater_Abstract][1.5] table->update[RESOLU]

Bonsoir,

en écrivant le précédent post, j'ai du retracé et détaillé mes actions pour que sekaijin comprenne ce que j'ai fait...et j'ai trouvé mon problème.
En effet, je récupère le business objet, class spécialisée de Zend_Db_Table, depuis...la session!!
En effet, je stocke mon objet correctement initialisé (notamment concernant la connexion à la base) en session : aussi quand je le récupère, ma connexion est perdue.
Pour information à tous ceux qui pourraient être concernés (stockage des objets de session) : L'utilisation de connexions persistantes n'est pas supporté, ni conseillé, par le composant Zend_Db.
cf. article http://framework.zend.com/manual/fr/zend.db.html, chapitre 10.1.8. Fermer une connexion.
ou chapitre concernant la sérialisation (automatique dans les sessions) 10.6.4.3. Reconnecter l'objet Row à la Table
La solution à mon problème de l'objet récupéré depuis la session en lecture seule : il faut donc le reconnecter à la base, par exemple en faisant un refresh sur l'objet en cours de modification avant de modifier ses valeurs récupérées depuis le form.

Yoong

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages