Problème de transaction ?....

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de transaction ?....

Re: Problème de transaction ?....

par Unkof » 19 févr. 2010, 13:36

Problème réglé.

Problème de transaction ?....

par Unkof » 18 févr. 2010, 21:02

Bonjour à tous,

J'ai un problème de transaction que je n'arrive pas à solutionner, il y a sûrement quelque chose que je n'ai pas compris.

J'ai un script de gestion d'évènement central pour mon jeu qui est structuré comme ca :

Code : Tout sélectionner

mysqli_autocommit($connect,FALSE); $begin=mysqli_query($connect,"BEGIN"); $requete=mysqli_query($connect,"SELECT Id,Traite,Operation FROM event WHERE Cfini<='$tempsactuel' AND Traite=0 ORDER BY Cfini ASC"); while($result=mysqli_fetch_array($requete)) { if($result['Operation']=="PRODUNITE" { if($result['Traite']==0) { $majtraite=mysqli_query($connect,"UPDATE event SET Traite=1 WHERE Id='$idoperation' LIMIT 1"); // .... On effectue diverses opérations // .... // ... ayé c'est fini $requetecom=mysqli_query($connect,"DELETE FROM event WHERE Id='$idoperation' LIMIT 1"); } } }
Ce code peut être exécuté par n'importe quel joueur connecté, mais il est aussi exécuté par une tache CRON pour éviter les engorgements des évènements arrivant à terme par exemple la nuit.

La tache cron appelle donc un script qui traite lui aussi les évènements via (exactement le même qu'exécute le joueur ..) :

/usr/local/php5/bin/php -f /home/test/evenements.php

Chaque évènement à bien sûr un ID qui lui est propre.

Mon problème, c'est que j'ai journalisé les evènements traité, et je me suis apercu que de temps en temps, j'ai mon CRON et un Joueur qui exécutent le même évènement (même ID) et que mon évènement est donc exécuté 2 fois !?

Quelqu'un peut m'expliquer où est l'erreur ? .... parce que là, je sèche.

Je croyais avoir compris le fonctionnement des transactions, mais à première vu, je me suis trompé ... :s

PS:Bien sûr, les tables sont en INNODB.