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 :
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 PHP :
<?php
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é ...
PS:Bien sûr, les tables sont en INNODB.