[RESOLU] Pb pour étendre mysqli...

Petit nouveau ! | 3 Messages

28 févr. 2014, 18:55

Qui peux me dire pourquoi ceci ne fonctionne pas, étant entendu, que tout ce passe bien coté connexion.
En fait, si une requête ne renvoie qu'une ligne, tout va bien, mais si elle en renvoie plusieurs, nada :
le $this->liste n'est même pas créé [affichage avec print_r] !
Et pourtant, le même print_r me permet de vérifier que le $oTmp est bien rempli, et parcours bien la table...
J'utilisais le même principe sans difficulté avec les mysql_fonctions... :-(
Je coince dessus depuis plusieurs jours, sans comprendre où est le soucis ! HELP!!!
class maRequete extends mysqli{
    private function connexion($dsn) {
        if (!$this->connecte) {
            $this->mysqli($dsn->serveur,$dsn->utilisateur,$dsn->mdp,$dsn->base);
            if ($this->connect_error) die('Erreur de connexion (' . $this->connect_errno . ') '. $this->connect_error);
            $this->connecte = true;
        }
    }

    function maRequete($requete){
        $this->connexion($dsn);
        $resultat       = $this->query($requete) or die("Myrequete:$requete:: erreur:" . $this->error);
        if ( ($this->nombre = $resultat->num_rows) == 1) {
            foreach ($resultat->fetch_object() as $k=>$v)
                $this->$k       = $v;
        } elseif ($this->nombre) {
            $this->liste    = array();
            while ($oTmp    = $resultat->fetch_object())
                $this->liste[]  = $oTmp;
    }
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 févr. 2014, 21:39

Salut,


Peu être parce qu'il faut lui demander poliment ?
Comme dur forum quoi ....

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

02 mars 2014, 10:49

Comme ça peut servir à d'autres, contrairement à la réponse précédente (!), je vous donne 'ma' réponse (il y en sûrement d'autres!!!)
J'ai contourné le problème avec:
class maRequete {
    function maRequete($requete){
        global $dsn;
        $this->mysqli = new mysqli($dsn->serveur,$dsn->utilisateur,$dsn->mdp,$dsn->base);
        $resultat       = $this->mysqli->query($requete) or die("Myrequete:$requete:: erreur:" . $this->mysqli->error);
        if ( ($this->nombre = $resultat->num_rows) == 1) {
            foreach ($resultat->fetch_object() as $k=>$v)
                $this->$k       = $v;
        } elseif ($this->nombre) {
            $this->liste    = array();
            while ($oTmp    = $resultat->fetch_object())
                $this->liste[]  = $oTmp;
    }
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 mars 2014, 10:39

ça n'a aucun sens ce que tu fais ...

L'héritage permet d'étendre le comportement d'une classe, en lui ajoutant des fonctionnalité.
Toi, tu veux faire de l'accès aux données en utilisant mysqli.

Il faudrait que l'instance de mysqli soit un attribut de ta classe, pas un parent
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer