Bonjour,

Je désire protéger une table contre toute autre modification lorsque celle-ci est déjà en cours de modification par un de mes script (php). Plus concrétement, dans une opération d'achat, je dois vérifier le solde d'un compte et soit marquer que la commande est payée et insérer un historique d'achat si le solde est suffisant; soit rejeter la transaction.
Comment être sur que lorsque le contrôle du solde d'un client est ok, qu'il n'y ait pas eu entre temps un autre achat effectué par ce même client (donc un autre script) donc a peut-être rendu son solde insuffisant ?

Je me suis donc tourner vers la gestion des vérrous ...

Mon soucis est que je suis tombé sur plusieurs solutions et je ne sais pas laquelle adopter en étant sûr de ne pas faire fausse route :
  • Passer par GET_LOCK, IS_FREE_LOCK, RELEASE_LOCK (j'imagine que cela concerne toutes les tables de la BD puisque dans la syntaxe on ne fournit pas le nom d'une table précise)
  • Passer par des LOCK TABLES (que faire dans ce cas si mon script plante ou autre et que UNLOCK TABLES n'est pas exécuté => BD dans un état incohérent)
  • Passer par SELECT ... FOR UPDATE (est ce que cela est suffisant pour moi ?)


Je précise que je ne peux pas passer par les transactions car malheureusement le site est basé sur prestashop (CMS) et ne supporte pas cela.

Merci