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

PHP & Base de données Discussion :

Information sur la gestion des accès à la base de données


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Information sur la gestion des accès à la base de données
    Bonjour,
    je m'intéresse aujourd'hui à PDO... Je cherche en effet à refondre un de mes vieux sites en me basant sur une conception plus évolutive et maintenable.

    Ma question concerne le design pattern singleton et l'accès à la base de données. Cette question n'est effectivement pas propre à PDO et serait valable avec une gestion plus ancienne de l'accès à la base de données (mysql_connect...), mais m'intéressant à cette technologie (notamment l'ORM décrit ici : http://julien-pauli.developpez.com/tutoriels/php/pdo/) j'ai préféré poster mon topic dans cette section du forum.

    Dans le cadre d'un design pattern singleton appliqué à une classe héritant de la classe PDO : la connexion à la base de données est-elle la même pour tous les utilisateurs (cas 1) ? ou bien permet-il juste de garantir l'unicité de la connexion pour 1 utilisateur (cas 2) ?

    Si le cas (1) est vrai, comment gérer dans ce cas un pool de connexion et permettre aux utilisateurs de requêter la base en même temps ?
    Si le cas (2) est vrai, comment gérer l'exécution de 2 requêtes consécutives et dépendantes (Par exemple, cas de l'exécution d'une requête avec une clause LIMIT puis d'une requête de type FOUND_ROWS) ?

    Je ne sais pas si je suis bien clair... Si c'est le cas n'hésitez à me le dire et j'essaierai de mieux m'exprimer.

    Par avance merci pour vos éclaircissements.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par doudou34 Voir le message
    Dans le cadre d'un design pattern singleton appliqué à une classe héritant de la classe PDO : la connexion à la base de données est-elle la même pour tous les utilisateurs (cas 1) ? ou bien permet-il juste de garantir l'unicité de la connexion pour 1 utilisateur (cas 2) ?
    pour être précis, la connexion peut seulement être unique sur une page puisque PHP ferme automatiquement la connexion à la fin de la page

    Citation Envoyé par doudou34 Voir le message
    Si le cas (2) est vrai, comment gérer l'exécution de 2 requêtes consécutives et dépendantes (Par exemple, cas de l'exécution d'une requête avec une clause LIMIT puis d'une requête de type FOUND_ROWS) ?
    pour ça tu peux utiliser une transaction :
    http://sqlpro.developpez.com/isolation-transaction/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    OK si j'ai bien compris, l'usage du design pattern singleton dans ce cas, permet seulement de conserver/réserver une unique connexion à la base de données pendant l'exécution du script....
    Chaque utilisateur ayant fait une requête au serveur aura donc une connexion qui lui sera dédié tout au long du traitement de sa demande.

    Est-il possible toutefois en PHP de faire en sorte qu'un instance d'objet soit unique pour tous les monde ? (dsl ma question n'est du coup surement pas dans la bonne catégorie du forum)

    Au sujet de l'utilisation d'un transaction : pourquoi serait-elle nécessaire puisque la connexion est unique à chaque utilisateur ?
    Si je fait un FOUND_ROWS, mySQL devrait me retourner le nombre de ligne de la dernière requête exécutée sur la connexion utilisée, et cette connexion est utilisée à un instant T par un seul utilisateur....


    PS : désolé si je suis pas clair... j'entends par "utilisateur" une 'instance du script PHP qui est en cours d'exécution dans mon application, pour traiter la demande d'un utilisateur

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Non, il n'a pas de véritable singleton en PHP. Toute les données sont "rechargées et détruites" entre 2 appels de scripts (2 requêtes http le plus souvent).

    Pour le FOUND_ROWS, cette fonction doit renvoyer une info stockée au niveau du SGBD, pas de la connexion. Voilà pourquoi l'utilisation de transaction est nécessaire.
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

Discussions similaires

  1. Gestion des accès à une base de données & retry
    Par GasparOff dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 12/03/2014, 12h47
  2. Réponses: 3
    Dernier message: 01/07/2012, 15h57
  3. Réponses: 0
    Dernier message: 13/03/2010, 10h20
  4. Gestion des accès à une base de données
    Par white_tiger dans le forum Sécurité
    Réponses: 7
    Dernier message: 07/02/2007, 00h39
  5. Réponses: 12
    Dernier message: 06/10/2006, 13h35

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