PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 29-03-2013 16:03:19

ebouilleur
Membre
Lieu : Nantes
Inscription : 19-05-2009
Messages : 165
Site Web

Procédure stocké avec variable NULL

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.


CREATE DEFINER=`admin`@`localhost`
FUNCTION `calc_gain_parieur`(somme int, somme_mise_gagnant int, somme_mise_perdant int, employe_gagnant int, id_employe int)
RETURNS int
BEGIN

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

#2 31-03-2013 04:01:41

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Procédure stocké avec variable NULL

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

#3 31-03-2013 14:02:46

ebouilleur
Membre
Lieu : Nantes
Inscription : 19-05-2009
Messages : 165
Site Web

Re : Procédure stocké avec variable NULL

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

#4 31-03-2013 17:22:00

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Procédure stocké avec variable NULL

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

#5 31-03-2013 18:16:19

ebouilleur
Membre
Lieu : Nantes
Inscription : 19-05-2009
Messages : 165
Site Web

Re : Procédure stocké avec variable NULL

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

#6 01-04-2013 05:28:40

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Procédure stocké avec variable NULL

Sous MySQL essaye IF somme_mise_perdant IS NULL THEN...


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums