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

Langage PHP Discussion :

Problème class


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut Problème class
    Salut,

    J'ai une classe de connection et elle plante un peu lorsque j'ai deux connections d'ouvertes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $connect1 =& new connect;
       $connect1->query()
       while (list($id) = mysql_fetch_array($connect1->query) {
          $connect2 =& new connect();
          $connect2->query();
          $connect2->close();
       }
       $connect1->close();
    Le problème c'est quand je ferme $connect2, alors je ne peux pas fermer $connect1 par la suite, il ne trouve pas le lien.

    Mes deux fonctions de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function connect() {
       global $db;
       $this->connect = @mysql_connect($db['host'], $db['name'], $db['pass']);
       mysql_select_db($db['db'], $this->connect);
    }
     
    function close() {
       mysql_close($this->connect);
    }

  2. #2
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Aucune solution?

  3. #3
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    En faits ce qu'il se passe la c'est du à mysql_connect, et pas à ta classe.

    En effet tu ouvres deux connexions sur la même entité (cf global $db), dans ce genre de cas mysql_connect detecte automatiquement la similarité et renvoie le même link pour les deux connections.


    Si c'est pour piocher dans des bdd différentes sur le même serveur, utilise la syntaxe SQL,
    SELECT [BDD].[TABLE].[CHAMP] FROM [BDD].[TABLE] WHERE ect


    bye

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    tes deux connections se font dans la même session ?

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $connect1 =& new connect;
       $connect1->query()
       while (list($id) = mysql_fetch_array($connect1->query) {
          $connect2 =& new connect();
          $connect2->query();
          $connect2->close();
       }
       $connect1->close();
    pourquoi faire deux connect de suite ??? Pourquoi ne pas faire plutot ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $connect =& new connect;
    $req1 = $connect->query()
    while (list($id) = mysql_fetch_array($req1)) {
          $req2 = $connect->query();
    }
    $connect->close();
    Sinon je trouve perturbant ce mysql_fetch_array au milieu de ton code...

  6. #6
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    pourquoi faire deux connect de suite ??? Pourquoi ne pas faire plutot ce code ?
    C'est clair +1.

    Sinon je trouve perturbant ce mysql_fetch_array au milieu de ton code...
    Tu est bien reveillé Sa fait quatre foisque je lis ce poste je ne l'avais toujours pas vu :o
    +10

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    moi surtout je voit pas pourquoi tu pourrais pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $connect1 =& new connect;
       $connect1->query()
       while (list($id) = mysql_fetch_array($connect1->query) {
          $connect1->query();
          ......
       }
       $connect1->close();
    essayes plutot de pouvoir gérer des requetes multiples .....

  8. #8
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par siddh
    moi surtout je voit pas pourquoi tu pourrais pas faire...
    ca ressemble légèrement à ce que j'ai proposé au moins on est d'accord

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    voui (je suis pas encore au 4eme mug de café pas tres reveillé) , apres c est sa syntaxe qui est étrange efffectivement ....

  10. #10
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Pourquoi mysql_fetch_array est-il perturbant ?

    Ce que je ne comprends pas c'est même si je fais un $req1 = $connect->query(blabla), alors ma variable de la requête dans ma classe sera ecrasée puis que je fais:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function query($query) { 
       $this->query = mysql_query($query); 
    }
    Je suis perdu la...

  11. #11
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Pq c'est bizarre tu as une partie de ta couche d'accession aux données qui est encapsulé dans une classe mais qu'à moitié :s

    Sa rends ta couche d'accession aux données un peu nullle et non avenante :s

    concernant la structure de taclasse il en été pas mal discuté sur ce thread http://www.developpez.net/forums/vie...283&highlight=

  12. #12
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Désolé j'ai mal écrit ma fonction queyr elle s'écrit comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function query($query) { 
       $this->query = mysql_query($query); 
    }

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    deja, avoir une methode et un attribut qui portent le même nom, c est tres moyen ....

  14. #14
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Et pourquoi pas ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function query($query) { 
       return mysql_query($query); 
    }
    :

  15. #15
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Oui mais dans ce cas ensuite je ne peux plus faire de bouche avec mysql_fetch_array car je n'aurais plus variable de requête.
    Je vais essayer de bidouiller.

  16. #16
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Benh si !?

    ton $query tu le retrouves à la sortie de function query($sql) {return mysql_query($sql); }.


    Mais c'est pas très pratique ton truc puisque dans ta conception une connection ne peut executer qu'un seul query à la fois :s

    Le mieux serait qu'à la sortie tu retournes un objet encapsulant ton $query et qu'il possède une méthode fetch()

    J'ai comme l'impressionde repeter un précédent thread : o

  17. #17
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Citation Envoyé par ePoX
    Mais c'est pas très pratique ton truc puisque dans ta conception une connection ne peut executer qu'un seul query à la fois :s
    C'est mon problème, d'ou le topic

    Le mieux serait qu'à la sortie tu retournes un objet encapsulant ton $query et qu'il possède une méthode fetch()
    Ca ça m'interesse si tu sais comment faire...

  18. #18
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Ca ça m'interesse si tu sais comment faire...
    Oui j'ai une petite idée je m'était deja attaqué au problème, même si se ne sera jamais aussi bon que PDO.

    Et puis je ne l'ai jamais reellement testée,donc y'à peut être un truc ou deux à corrigé

    Regardes cette classe et inspire t'en pour en faire ton implémentation.

    n'hésites pas si tu as des questions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
     
    class MysqlQueryResults implements ISqlQueryResults
    {
     
        private $Query_;
     
        public function __construct( $query )
        {
            $this->Query = false;
            if( is_resource($query) )
            {
                $this->Query_ = $query;
            }
            else
            {
                throw new Exception("L'argument fourni n'est pas une ressource !");
            }
        }
     
        public function Next($type = "ASSOC")
        {
            switch($type)
            {
                case "ASSOC":
                    $res = mysql_fetch_array($this->Query_ ,MYSQL_ASSOC);
                break;
                case "NUM":
                    $res = mysql_fetch_array($this->Query_ , MYSQL_NUM);
                break;
                case "OBJECT":
                    $res = mysql_fetch_object($this->Query_);
                break;
                default:
                    $res = mysql_fetch_array($this->Query_ , MYSQL_BOTH);
                break;
            }
            if( $res == false )
            {
                @mysql_free_result($this->Query_);
                return false;
            }
     
            return $res;
        }
     
        public function Count()
        {
            if($this->Query_ != false)
            {
                return mysql_num_rows($this->Query_);
            }
            return -1;
        }
     
        public function __destruct()
        {
            @mysql_free_result($this->Query_);
            unset($this->Query_);
        }
    }
    ?>
    Ici la méthode Next correspond au fetch dont je parlais.

    bye

  19. #19
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tiens Anduriel, ca pourra t'interesser :
    http://www.phppatterns.com/docs/design/data_access_object_pattern_more_widgets

  20. #20
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci à vous deux, je regarderai tout ça, mais pour l'instant c'est du php que je ne connais pas... encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème class robot
    Par groupe51 dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 29/05/2006, 13h26
  2. problème classe managée.
    Par adicor dans le forum MFC
    Réponses: 5
    Dernier message: 08/05/2006, 21h19
  3. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45
  4. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  5. problème classe et fonction
    Par zmatz dans le forum C++
    Réponses: 14
    Dernier message: 19/10/2005, 21h46

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