Programmation concurrentielle PHP/MySQL - Comment faire?
Posté : 20 mars 2007, 17:20
Bonjour !
Je rencontre un problème en utilisant PHP et MySQL et je pense que la solution se trouve plutôt au niveau du serveur MySQL que de PHP et c'est pourquoi je poste donc dans cette partie plutôt que dans PHP.
Voici mon code PHP très simplifié :
Je ne veux pas de solution du genre : "UPDATE globals SET value = value + 1 WHERE label = 'nombreDeHit'" car j'effectue des tests sur la variable.
Quelles sont donc les solutions ? Est-il possible de faire des genres de mutex, lock table (qui marche pas tout le temps chez moi j'ai l'impression), ou tout autre meilleure solution ?
Merci beaucoup !
Je rencontre un problème en utilisant PHP et MySQL et je pense que la solution se trouve plutôt au niveau du serveur MySQL que de PHP et c'est pourquoi je poste donc dans cette partie plutôt que dans PHP.
Voici mon code PHP très simplifié :
<?php
// $db est un objet perso qui permet de faire des requêtes sql et de renvoyer immédiatement le résultat
$nbDeHit = $db->exec("SELECT value FROM globals WHERE label = 'nombreDeHit'");
$nbDeHit++; // ce qu'il faut retenir c'est qu'une modification est apportée à la variable
sleep(rand(0,4000)); // et que cela dépend de condition qui ne peuvent pas être fait dans MySQL
$db->exec("UPDATE globals SET value = ".$nbDeHit." WHERE label = 'nombreDeHit'");
Le problème est donc si cette page est exécutée par plusieurs personnes en même temps, la valeur finale ne sera pas incrémenter de la somme des personnes, mais aura la valeur initial + 1.Je ne veux pas de solution du genre : "UPDATE globals SET value = value + 1 WHERE label = 'nombreDeHit'" car j'effectue des tests sur la variable.
Quelles sont donc les solutions ? Est-il possible de faire des genres de mutex, lock table (qui marche pas tout le temps chez moi j'ai l'impression), ou tout autre meilleure solution ?
Merci beaucoup !