Sérieux problème avec les nombres et mysql

code
WRInaute impliqué
WRInaute impliqué
 
Messages: 648
Inscription: 29 Juil 2005

Sérieux problème avec les nombres et mysql

Message le Ven Jan 12, 2007 15:18

Bonjour,

sur le site de mon www, je suis confronté à un problème récurrent et pour le moins génant :

Certaines opérations sur le site provoquent des enregistrements par addition et soustraction dans la base de données.

Mais il s'avère que parfois (rarement heureusement), il y a un bug qui fait qu'au lieu d'ajouter par exemple 1000 à la valeur actuelle d'un champ, je retrouve un chiffre complètement erroné et toujours le même soit 16xxxxxxxx
(certainement le maximum possible que peut permettre le type de champ)

Pour info, ce bug se produit sur des champs de ce type : mediumint(10)

Je suis sûr que ça vient de là et que je me suis planté à ce niveau, mediumint ne doit pas convenir pour traiter les opérations que je demande

Qu'en pensez-vous ?

code
WRInaute impliqué
WRInaute impliqué
 
Messages: 648
Inscription: 29 Juil 2005

Message le Ven Jan 12, 2007 17:48

Ce que j'apprécie sur ce forum, c'est qu'à chaque fois que je pose une question qui nécessite de l'aide, je constate qu'il y a foule pour répondre.

Par contre dés que quelqu'un ouvre un sujet pour dire qu'il y a une GoogleDance, ou que des sites montes dans l'index et que d'autre perdent des places, alors là il y a des pages et des pages de réponses...

gabriel_f
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 19
Inscription: 12 Jan 2007

Message le Ven Jan 12, 2007 18:02

Salut,

A priori en unsigned ( donc toujours > 0 ) la valeur max d'un mediumint cest
(doc mysql) The unsigned range is 0 to 16777215.

Donc vraisemblablement , tu arrives a cette valeur max et mysql cap. ( chose qui m'est deja arrivé) t'es bon pour passer en INT ou t'as plus de marge, et apres en BIGINT si tu pousses vraiment loin

http://dev.mysql.com/doc/refman/4.1/en/ ... rview.html

Voila jespere t'avoir aidé ( un peu )

code
WRInaute impliqué
WRInaute impliqué
 
Messages: 648
Inscription: 29 Juil 2005

Message le Ven Jan 12, 2007 20:10

merci pour ta réponse mais apparemment le probleme se situe ailleurs. Car en fait il se passe que par exemple un enregistrement ajoute 1000 à la valeur actuelle du champ, par exemple 500. Je devrais donc avoir comme nouvelle valeur 500+1000 = 1500

Et c'ets là ou je me retrouve de temps en temps avec la valeur maximum permise par mediumint, soit 16777215, ce qui n'est absolument pas normal !

ACth
WRInaute impliqué
WRInaute impliqué
 
Messages: 795
Inscription: 11 Nov 2006

Message le Ven Jan 12, 2007 20:21

Un problème dans tes requêtes ..
.. que répondre de plus !?

code
WRInaute impliqué
WRInaute impliqué
 
Messages: 648
Inscription: 29 Juil 2005

Message le Ven Jan 12, 2007 20:58

ACth a écrit:Un problème dans tes requêtes ..
.. que répondre de plus !?


est-il possible qu'une requete se mette à tourner en boucle et provoquer et si oui pourquoi et comment y remédier ?


NxtGen
WRInaute impliqué
WRInaute impliqué
 
Messages: 762
Inscription: 24 Oct 2006

Message le Ven Jan 12, 2007 21:27

code a écrit:Ce que j'apprécie sur ce forum, c'est qu'à chaque fois que je pose une question qui nécessite de l'aide, je constate qu'il y a foule pour répondre.

Par contre dés que quelqu'un ouvre un sujet pour dire qu'il y a une GoogleDance, ou que des sites montes dans l'index et que d'autre perdent des places, alors là il y a des pages et des pages de réponses...


Sans voir le code, c'est difficile de te répondre...
C'est surement un soucis dans ta requete qui est peut etre dans une boucle, ou des variables que tu prend en compte dans cette requete
Il y a un millions de raisons envisageables, alors un petit morceau de code pourrait peut etre nous aider à t'aider.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19598
Inscription: 8 Aoû 2004

Message le Sam Jan 13, 2007 0:50

ajoute
Code: Tout sélectionner
error_reporting(E_ALL);
au début de ton code, tu comprendras peut-être d'où vient le problème

bozoleclown
WRInaute impliqué
WRInaute impliqué
 
Messages: 893
Inscription: 24 Nov 2005

Message le Sam Jan 13, 2007 13:30

Ca t'arrive pas de des faire plutot

500 - 1000 et donc du coup en Unsigned c normal que ce soit égale à 16xxxxxx

Donc si c un probleme de soustraction trop gourmande
passe en ton champ en "Signed"

ainsi 500 - 1000 = -500

maintenant tu dois avoir qd meme un p'tit bug qqpart


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19598
Inscription: 8 Aoû 2004

Message le Sam Jan 13, 2007 15:18

bozoleclown a écrit:maintenant tu dois avoir qd meme un p'tit bug qqpart
c'est le problème de pas mal de scripts écrit avec un bô
Code: Tout sélectionner
error_reporting(0);
au début. Certe, ça permet de cacher les erreurs à l'exécution, mais justement, c'est bien ça le problème.

code
WRInaute impliqué
WRInaute impliqué
 
Messages: 648
Inscription: 29 Juil 2005

Message le Sam Jan 13, 2007 16:21

bozoleclown a écrit:Ca t'arrive pas de des faire plutot

500 - 1000 et donc du coup en Unsigned c normal que ce soit égale à 16xxxxxx

Donc si c un probleme de soustraction trop gourmande
passe en ton champ en "Signed"

ainsi 500 - 1000 = -500

maintenant tu dois avoir qd meme un p'tit bug qqpart


Normalement ce n'est pas possible : mais ton exemple vient de me faire réfléchir à une chose ! :D
si par exemple un membre du site force le chargement d'une page et exécute 2 fois de suite le script à interval très court, ça ne serait pas la cause du probleme.

Exemple : un membre à 1000 point sur son compte. il valide un formulaire
qui fait l'opération 1000-1000 et exécute 2 fois le script en rechargenat la page jsute après la validation du formulaire.

Normalement ce n'est pas possible car il y a une requete de vérification avant la requete d'enregistrement de l'opération qui effectue la soustraction. Mais admettons que pour une raison ou une autre la page mette du temps à charger. La personne revalide le formumaire ou rafraichie la page pensant que sa premiere validation n'a pas marché.

L'erreur doit donc venir du traitement du formulaire et non de la base de données ou de mes champs ce qui me rassure déjà pas mal


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités