IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Gestion des vérrous : quelle approche adoptée ?


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut Gestion des vérrous : quelle approche adoptée ?
    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

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu peux transférer ton code PHP en procédure SQL, ce qui te permettra de tout faire dans une transaction. Il suffira ensuite que le code PHP lance la procédure SQL au lieu de faire lui même les opérations individuellement.
    On appelle ça le développement en "base de données épaisse".
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Tu peux transférer ton code PHP en procédure SQL, ce qui te permettra de tout faire dans une transaction. Il suffira ensuite que le code PHP lance la procédure SQL au lieu de faire lui même les opérations individuellement.
    On appelle ça le développement en "base de données épaisse".
    Merci pour ta réponse.

    Je rappelle que j'avais précisé:

    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.

    De plus, je ne vois pas comment juste passer par des transactions me permettrait d'éviter un accès unique au solde ?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Prestashop ou pas, dès que le logiciel se connecte au SGBD pour lui demander quelque chose, il y a une transaction.

    Ce que j'ai compris, c'est que tu ne peux pas gérer une transaction du SGBD dans le PHP parce que le code de Prestashop ne te le permet pas. Je suggérais donc de lancer une seule requête vers le SGBD qui au lieu de faire exécuter une requête lancera une procédure stockée SQL qui fera tout le boulot à l'intérieur de la transaction lancée par l'appel au SGBD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/07/2012, 22h07
  2. Quelle solution pour tester la gestion des blocages ?
    Par Nonoleplongeur dans le forum HyperFileSQL
    Réponses: 9
    Dernier message: 09/02/2011, 01h08
  3. Gestion des erreurs : Quelle est la meilleure solution ?
    Par Jonathan.b dans le forum Débuter
    Réponses: 1
    Dernier message: 28/02/2009, 23h54
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo