[php/mysql] exiger la réussite d'une requete

exiger la réussite d'une requete [php/mysql] - PHP - Programmation

Marsh Posté le 07-11-2008 à 18:54:32    

Yo,
 
Admettons jean-michou gagne le jackpot d'un jeu imaginaire, ce jackpot s'eleve a 45 640€
 
Impressionant n'est-ce pas ?
 
J'ai une requete qui va inserer dans la table PaieTaMoule le gagnant jean-michou et sa somme 45 640€
 
Si jamais ma base/mon site plante/un reboot ou je ne sais quoi d'autres
 
est ce que ce genre d'algorithme est correcte ou deconseillé ?
 
 

Code :
  1. while($result==0)
  2. {
  3. $result=INSERT 45640€,jean-michou INTO PaieTaMoule
  4. }


Tant que l'insertion echoue je continue a faire un insert :o
 
Est-ce que ca peut résoudre le pb dans des cas particuliers ? Mini Panne, mini reboot, mini faille spatio temporel
 
Ou bien cela est completement inutile, etant donné que si la requete échoue c'est que mon site / bdd est down et que le client aura de toute maniere un timeout ?
 
 
Sinon comment contourner le pb ?
 
J'ai pensé (mais c'est vraiment con pour michou) a faire l'annonce de son gain seulement en fin de code si toutes les données ont été enregistrée correctement:
 

Code :
  1. ->insert le gain de michou dans bdd
  2. ->si réussi echo "ta gagner mec"
  3. ->si echec echo "perdu" :lol: 
  4. //en gros en code ca ferais simplement ca
  5. $result=INSERT 45640€,jean-michou INTO PaieTaMoule
  6. if ($result)
  7. {
  8.     echo "ouais ta gagner!"
  9. }
  10. else
  11. {
  12.     echo "tain c'est con t'avais gagné mais ta aucune preuve erf !"
  13. }


Je crois que cette derniere solution est la meilleure :o c'est dégueulasse pour celui qui tomberai sur un crash au moment de l'attribution du gain, :o


Message édité par Profil supprimé le 07-11-2008 à 18:57:43
Reply

Marsh Posté le 07-11-2008 à 18:54:32   

Reply

Marsh Posté le 07-11-2008 à 19:14:53    

Tu ne peux pas exiger la réussite d'une requête. C'est pas possible. Prenons l'example simple que ta DB crash en plein milieu de l'exécution (parce que le CPU du server prend feu), ben même avec la meilleure volonté du monde tu vas avoir du mal à finaliser la query.
 
Par contre en utilisant des transactions (et sous MySQL des tables InnoDB, vu que MyISAM est une daube et ne supporte pas ce genre de choses) tu peux t'assurer que ta DB reste cohérente: soit toutes les opérations de la transaction s'exécutent correctement, soit aucune ne s'exécute., mais tu ne te retrouves jamais avec des opérations à moitié exécutées.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-11-2008 à 19:16:46    

regarde du cote des transaction/commit/rollback


---------------

Reply

Marsh Posté le 07-11-2008 à 19:33:38    

Les transactions sous mysql j'aimerais bien les utiliser, sous sql server c'est super simple, mais du peu que j'ai réussi a comprendre pour mysql ca me semble usine a gaz
 
Il y aurais une doc/un tuto pour mysql sur les transactions ?
 
Je me souviens avoir chercher longtemps sur google et pas moyen de trouver qqchose de clair a ce sujet, c'est nouveau non ?  
 
 
 
[edit] Je confonds avec les procédure stockées et déclencheurs qui sont tres difficile a gerer avec mysql :o


Message édité par Profil supprimé le 07-11-2008 à 20:22:04
Reply

Marsh Posté le 07-11-2008 à 19:35:27    

masklinn a écrit :

Tu ne peux pas exiger la réussite d'une requête. C'est pas possible. Prenons l'example simple que ta DB crash en plein milieu de l'exécution (parce que le CPU du server prend feu), ben même avec la meilleure volonté du monde tu vas avoir du mal à finaliser la query.
 
Par contre en utilisant des transactions (et sous MySQL des tables InnoDB, vu que MyISAM est une daube et ne supporte pas ce genre de choses) tu peux t'assurer que ta DB reste cohérente: soit toutes les opérations de la transaction s'exécutent correctement, soit aucune ne s'exécute., mais tu ne te retrouves jamais avec des opérations à moitié exécutées.


Ok merci pour vos msg, je vais m'attarder sur les transactions et tenter de coder au mieux  :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed