Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
J'ai un truc que je m'explique pas avec ma procédure stocké.
Quand sous phpmyadmin, je fais : SELECT calc_gain_parieur( 5000, 5000, NULL , 5, 5 ) le résultat qui s'affiche est NULL.
Alors que je ne veut pas, et d'après mon code, ca ne debvrait pas (enfin j'ai du me tromper sur qqchose.
DECLARE gain_du_joueur INT;
DECLARE gain_a_repartir INT;
IF employe_gagnant = id_employe THEN
SET gain_a_repartir = somme_mise_perdant - (somme_mise_perdant*10/100);
SET gain_du_joueur = (gain_a_repartir * somme / somme_mise_gagnant) + somme;
IF somme_mise_perdant = 0 THEN SET gain_du_joueur = somme; END IF;
END IF;
IF employe_gagnant != id_employe THEN
SET gain_du_joueur = 0 ;
END IF;
RETURN gain_du_joueur;
END##
Une idée?
Merci
Hors ligne
Bonjour,
Encore une fois, la rigueur n'est pas au rendez-vous concernant le contrôle de type de variable et de leur contenu. Aucun contrôle de valeur NULL (qui ne devrait pas être égal à zéro dans ce cas?). Mais il me semble que si on met zéro ta formule fourni un résultat négatif (0-quelque chose).
Revoit donc tout ça, et ca devrait aller mieux.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour,
Outch ca fait mal, je pensais que c'était pas mal fait pourtant.
Le controle de type de variable est fait pourtant, non? il y a le INT dans la déclaration de variable
Pour le controle de NULL, j'ai rien trouvé et je suppose que isset existe pas.
Sinon ce qu'on pourrait faire pour amélioré c'est rajouter la valeur par défaut :
DECLARE gain_du_joueur INT DEFAULT 0;
DECLARE gain_a_repartir INT DEFAULT 0;
Mais à part ca je ne vois pas quoi.
Et non, le résultat de la formule n'est pas négatif
A+
Hors ligne
Bonjour,
Attention il ne faut pas mélanger PHP et MySQL. Le INT dans la déclaration de variable ne signifie pas que tu forces le type de variable passée dans ta procédure mais que la variable passée dans la procédure doit être de type INT. Ta procédure attends par conséquent que tu entres une valeur de type entier et non NULL.
Si tu travailles par exemple sous postgreSQL, le contenu n'est même pas évalué car en général tu as un RETURN NULL IF NULL INPUT dans la définition de ta fonction (sous postgres les procédures sont des fonctions).
Sinon la valeur NULL existe en MySQL et tu peux tester directement IF myvalue1=NULL THEN myvalue2=0; END IF; (Enfin de mémoire ca fait quelques temps que je ne travaille plus sous MySQL).
Bon week-end de Pâques.
Note : SET gain_a_repartir = somme_mise_perdant - (somme_mise_perdant*10/100); Or somme_mise_perdant est la variable d'entrée que tu as défini comme étant NULL donc je serais curieux ce que NULL - (NULL*10/100) pourrait donner comme résultat à part NULL, et il me semble que c'est bien ce que te retournes ta fonction non?
++
Dernière modification par Jc (31-03-2013 17:26:07)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
OK, pour la déclaration de variable, je ne savais pas que c'était juste de l'information..
Pour ta note, oui je suis d'accord que le résultat sera null, mais c'est pour ca que j'avais tester différente chose, y compris ca :
IF somme_mise_perdant = null THEN SET gain_du_joueur = somme; END IF;
pour faire un forcage en cas de null, mais ca ne fonctionne pas.
Sinon, pour le contrôle de type de variable et de leur contenu, tu ferai quoi de plus que ce que j'ai écris?
Merci
Et oui bonne fin de weekend de paques (et vive le chocolat!)
Hors ligne
Pages :: 1