Bonjour à tous,

J'ai un problème avec une requête INSERT INTO là voici :

extract($_POST);
                    if ($name != '') {
                        $query=$PDO->prepare('INSERT INTO item_template
                            (type, name, level, statsTemplate) 
                            VALUES (:type, :name, :level, :statsTemplate)');
                            $query->bindValue(':type',$type, PDO::PARAM_INT);
                            $query->bindValue(':name',$name, PDO::PARAM_STR);
                            $query->bindValue(':level',$level, PDO::PARAM_INT);
                            $query->bindValue(':statsTemplate',stats_item_add($statsTemplate), PDO::PARAM_INT);
                            $query->execute();
                        $query->CloseCursor();
                        echo ITEM_SUCCES;
                    }else {
                        echo ITEM_NOT_SUCCES;
                    }

Quand j'exécute cette requête j'ai un cannot be null de statsTemplate or quand j'y fais un echo j'ai bien ce que je souhaite...

Impossible de trouver l'erreur.

10 réponses


Tchoupi
Auteur

up

La fonction stats_item_add() renvoie bien un int ?

Tchoupi
Auteur

J'ai beau y mettre un int ou STR le résultat est le même.

Je publie pas ma function stats_item_add car elle fais un peu plus de 3000 lignes.
Voici le résultat d'une requête :
64#7#b#0#1d5+6,6e#a#0#0#0d0+10,77#23#0#0#0d0+35

si on a pas le reste difficile de retracer je pense ...
si ce n'est que de faire un debug() en cours de route de ta fonction stats_item_add ???

extract($_POST);
                    if ($name != '') {
                        $query=$PDO->prepare('INSERT INTO item_template
                            (type, name, level, statsTemplate) 
                            VALUES (:type, :name, :level, :statsTemplate)');
                            $query->bindParam(':type',$type, PDO::PARAM_INT);
                            $query->bindParam(':name',$name, PDO::PARAM_STR);
                            $query->bindParam(':level',$level, PDO::PARAM_INT);
                            $query->bindParam(':statsTemplate',stats_item_add($statsTemplate), PDO::PARAM_INT);
                            $query->execute();
                        $query->CloseCursor();

                        echo ITEM_SUCCES;

                    }else {
                        echo ITEM_NOT_SUCCES;
                    }

Bonjour,
Quel est le type de donnee de la colonne statsTemplate dans la table ? Est-ce une cle etrangere?

64#7#b#0#1d5+6,6e#a#0#0#0d0+10,77#23#0#0#0d0+35

C'est le resultat de stats_item_add() ? Si oui, ca ne rentrera jamais dans un INT ! (enfin sans PDO, au chausse pied, potentiellement mais avec des resultats tres imprevisibles! 'null' par exemple !)

Tchoupi
Auteur

Varchar.

Mais pour la ligne là : $query->bindParam(':statsTemplate',stats_item_add($statsTemplate), PDO::PARAM_INT);

Ce n'est pas PARAM_INT mais PARAM_STR.

Quand je fais un debug juste avant la sauvegarde $statsTemplate me renvoi bien ma valeur attendu, le problème est donc au moment de l'insertion pourquoi ? Je sais pas.

Depuis ce temps j'ai jamais trouvé la solution je me suis donc mis à CakePHP.

Si vous souhaitez tout de même m'aider à résoudre ce problème, je dirais pas non, comme ça, sa m'évitera de refaire cette erreur ou même d'aider d'autres personnes.

Le champ dans la table est en quoi ? INT, Varchar ?

Tchoupi
Auteur

Varchar bien sûr ^^

Tchoupi, essaie un peu de changer le " ' " par du ' " ' pour voir