Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2011, 10h10   #1
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Par défaut Problème d'insertion de données dans ma table

Bonjour,

j'ai un formulaire qui permet de saisir des données afin de les intégrer dans ma base.
Voilà comment je m'y prends:
- je récupère les données du formulaire dans un tableau
Code :
1
2
3
4
 
foreach ($this->getElements() as $nom=>$val){
$tab [$nom] = $val;
}
Si je fais un "Zend_Debug;;dump", j'obtiens bien un tableau avec les valeurs saisies dans le formulaire.
- j'insère les données dans ma table à l'aide de ce tableau
Code :
1
2
3
4
 
$model = new My_Model_Table();
$row = $model->createRow ( $tab );
$row->save();
Mon problème c'est que l'insertion ne se fait pas et j'obtiens le message d'erreur:
Citation:
SQLSTATE[22P02]: Invalid text representation: 7 ERREUR: syntaxe en entrée invalide pour l'entier : « »
Ce que je ne comprends pas c'est que si je m'y prends autrement pour faire l'insertion, en utilisant la methode "insert":
Code :
1
2
3
 
$model = new My_Model_Table();
$model->insert ( $tab );
Ca fonctionne???
Quelqu'un aurait une idée sur le pourquoi du comment????
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h49   #2
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Aucun retour

Je reformule alors ma question: pour l'insertion de données dans une table de ma base de données, quelle est la différence si j'utilise la méthode "insert" ou "createRow" puis "save" comme ci-dessous:
Code :
1
2
3
4
5
6
7
8
9
10
 
$tab = array(...) ; // contient les données à insérer dans ma table
$myModel =new Model_Table_myTable();
 
// méthode 1
$myModel->insert ($tab); 
 
// méthode 2
$row = $myModel->createRow ($tab);
$row->save();
Dans quel cas l'une ou l'autre ne fonctionne pas???
Pour ce qui me concerne c'est la méthode 2 qui fonctionne et je ne comprends pas pourquoi la méthode 1 ne fonctionne pas alors que jusqu'ici, c'est toujours avec cette méthode que j'insérais mes données.

Merci d'avance pour vos retours!
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 19h28   #3
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
avec insert tu récupère l'id de ce qui a été inséré il me semble.
Dans un cas donc tu travail avec un objet (createRow) et l'autre tu n'as que l'id.

Par contre createRow tu ne lui passe pas ton tableau d'élément c'est plutot :
Code :
1
2
3
 
$row = $table->createRow();
$row->element1 = $tab['element1'];
Et il serait bon de nous mettre le résultat de ton Zend_Debug::dump() plutôt que de dire que ça fonctionne, on pourra mieux juger de ce que tu as récupérer
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h40   #4
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Mon zend_debug m'affiche bien les valeurs associés aux champs de mon formulaire sous forme d'un tableau. J'obtiens un résultat du type:

Code :
1
2
3
4
5
 
array(19){
champ1=>val1,
 champ2=>val2, ...
}
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 11h30   #5
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
Je veux pas un exemple je veux le résultat complet sinon on ne peut pas voire ce qui peut poser problème.
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h35   #6
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Merci 5h4rk pour ton retour.

J'ai toujours utilisé la méthode createRow en passant mon tableau d'éléments comme dans l'exemple 7 du tuto et l'enregistrement se faisait correctement.
Voilà comment je m'y prends ici:
Code :
1
2
3
4
 
$row = $model->createRow ( $tabDefaultElement );	// $tabDefaultElement est un tableau associatif de la forme array ( "champ1" => "val1", "champ2"=>"val2", ....)
Zend_Debug::dump($row->toArray());
$rowUcs->save ();
Ci-dessous le résultat de mon Zend_Debug::dump($row->toArray()), suivi du message d'erreur:
Code :
1
2
 
array(20) { ["id1"] => NULL ["id2"] => string(6) "141616" ["no_etude"] => string(1) "1" ["surface"] => NULL ["nom"] => NULL ["nom_local"] => NULL ["nb"] => string(1) "1" ["organ"] => NULL ["comm"] => NULL ["relief"] => NULL ["domai1"] => NULL ["domai2"] => NULL ["surf"] => NULL ["pays"] => NULL ["min"] => NULL ["max"] => NULL ["mod"] => NULL ["methode"] => NULL ["region"] => NULL ["no_int"] => NULL } SQLSTATE[22P02]: Invalid text representation: 7 ERREUR: syntaxe en entrée invalide pour l'entier : « »
Voilà j'espère que c'est ce que tu demandais et que tu pourras m'apporter ton aide.

Merci d'avance...
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 15h19   #7
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
C'est exactement ce que je voulais, donc ce qui te pose problème c'est certainement les NULL du coup dans la requête.

En effet pour le createRow c'est que je surcharge quasiment tout le temps cette méthode ^^.

Tu vas surement devoir surcharger soit cette méthode toi aussi soit le save().
En gros il ne faut pas que tu passe tes NULL à ton objet il me semble, pourrais tu essayer et nous dire ce qu'il en est ?

EDIT: je ne suis pas sur que cela puisse poser des problèmes mais tu n as pas l'affichage de la requête qui est envoyé ?
Tu utilise ZFDebug ?
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 15h25   #8
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Comment je pourrais afficher la requête??
Non, je n'utilise pas ZFDebug, et je ne sais pas s'il a été installé dans mon application

merci...
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 15h32   #9
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Si je ne passe pas NULL à mon objet , j'obtiens toujours le meme message d'erreurs.
Voici le résultat de mon Zend_Debug:
Code :
1
2
 
array(20) { ["id1"] => string(0) "" ["id2"] => string(6) "141616" ["no_etude"] => string(1) "1" ["surface"] => string(0) "" ["nom"] => string(0) "" ["nom_local"] => string(0) "" ["nb"] => string(1) "1" ["organ"] => string(0) "" ["comm"] => string(0) "" ["relief"] => string(0) "" ["domai1"] => string(0) "" ["domai2"] => string(0) "" ["surf"] => string(0) "" ["pays"] => string(0) "" ["min"] => string(0) "" ["max"] => string(0) "" ["mod"] => string(0) "" ["methode"] => string(0) "" ["region"] => string(0) "" ["no_int"] => string(0) "" } SQLSTATE[22P02]: Invalid text representation: 7 ERREUR: syntaxe en entrée invalide pour le type numeric : « »
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 16h55   #10
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 680
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 680
Points : 1 044
Points : 1 044
J'ai l'impression que ton problème vient en faite que tu passe un string à la place d'un entier ce qui poserait le problème et d'où le message d'erreur.

Je te conseil d'intégrer ZFDebug c'est pas compliqué et ça te permets d'avoir plus de details sur les erreurs
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 17h23   #11
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
C'est ce que je pensais au début j'ai donc converti mes champs numériques en valuer entières avant de les insérer dans mon tableau mais j'ai toujours un message d'erreur. Je ne vois pas d'ou ca peut venir alors?

Je vais voir ce que je pux faire avec ZFDebug....
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h00.


 
 
 
 
Partenaires

Hébergement Web