Sérieux problème avec les nombres et mysql

  • Auteur de la discussion Auteur de la discussion code
  • Date de début Date de début
WRInaute impliqué
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 ?
 
WRInaute impliqué
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...
 
Nouveau WRInaute
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 )
 
WRInaute impliqué
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 !
 
WRInaute impliqué
code a dit:
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.
 
WRInaute impliqué
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
 
WRInaute accro
bozoleclown a dit:
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:
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.
 
WRInaute impliqué
bozoleclown a dit:
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
 
Discussions similaires
Haut