Problème avec mysql_fetch_array

[Résolu]
Signaler
Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010
-
Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010
-
Bonsoir,

Je me prends (un peu) la tête sur une de mes classes... en fait c'est ma classe de bdd.

Tout ce qui est connexion, selection et requête, pas de problème. Gestion des erreurs pas de problème.

Mais dès qu'il s'agit de faire un fetch_array... Le serveur me renvoie un warning: ...argument is not a valid ...

Le problème est que j'ai testé en créant une page faisant mysql_connect > select_db > query puis fetch_array et la ça passe. Je ne comprends pas... Il y a surement une variable mal définie... Alors je vous livre mon code tel quel des fois que quelqu'un aurait une idée de génie.

Flo

Mon code :

<?php

    class SQL2
        {
       
        ##    --------------------------------
        ##    Paramètres
        ##    --------------------------------
       
        ##    Paramètres de connexion
            private $u = '';    # Utilisateur
            private $p = '';    # Mot de passe
            private $b = '';    # Base
            private $h = '';    # Hote

        ##    Paramètres internes
            private $connx    = '';    # L'identification de connexion
            public $sql    = array();    # Liste des requêtes effectuées sur la session
            public $bench    = array();    # Liste les benchs effectués sur les requêtes
            private $compte    = '';    # Compte le nombre de requêtes
            public $resultat = '';    # Le résultat de la requête
       
        ##    Messages d'erreur
            private $_message = array(
            'CANT_CONNECT'
                => 'Impossible de se connecter &agrave; &laquo;&nbsp;%s&nbsp;&raquo;. Le serveur renvoie l\'erreur suivante&nbsp;:
[%s] %s',
            'CANT_CLOSE'
                => 'Impossible de fermer la connexion &agrave; &laquo;&nbsp;%s&nbsp;&raquo;. Le serveur renvoie l\'erreur suivante&nbsp;:
[%s] %s',
            'CANT_SELECT_DB'
                => 'Impossible de s&eacute;lectionner la base &laquo;&nbsp;%s&nbsp;&raquo;. Le serveur renvoie l\'erreur suivante&nbsp;:
[%s] %s',
            'ERROR_QUERY'
                => 'Erreur lors de l\'éxécution de la requ&ecirc;te #%s dont le texte est le suivant&nbsp;:
&laquo;&nbsp;%s&nbsp;&raquo;.
Le serveur renvoie l\'erreur suivante&nbsp;:
[%s] %s',
               
            );
       
        ##    --------------------------------
        ##    Fonctions
        ##    --------------------------------
       
        ##    Constructeur de la classe
             # Initialise la classe
            # Masque les erreurs E_WARNING (Gérées à travers les exceptions)
            # Lance la connexion
            # Sélectionne la base
        public function __construct()
            {
            global $variables;
           
            $this -> u = '';
            $this -> p = '';
            $this -> b = '';
            $this -> h = '';
           
            self :: setErrReport();
            self :: connect($this -> h, $this -> u, $this -> p);
            self :: select_db($this -> b);

            $this -> resultat = '';
            $this -> sql = array();
            $this -> bench = array();
            }
       
        ##    Destructeur de la classe
        public function __destruct()
            {
            self :: close();
            error_reporting($this -> errorReporting);
            }

        ##    Connexion à la base <==> mysql_connect
        public function connect($host, $user, $pass)
            {
            try
                {
                $this -> connx = mysql_connect($host, $user, $pass);
           
                if ( isset($this -> connx) && is_resource($this -> connx) )
                    {
                    return true;
                    }
                else
                    {
                    $message = sprintf($this -> _message['CANT_CONNECT'], (isset($host) ? $host : 'localhost'), mysql_errno(), mysql_error());
                    throw new exception($message);
                    }
                }
            catch(Exception $e)
                {
                die(xhtml::_error('ERREUR :: Bdd', 'pages/styles.css', $e->getmessage()));
                }
            }
       
        ##    Récupère les informations sur les erreurs
        private function getErrReport()
            {
            $this -> ErrorReporting = error_reporting();
            }
       
        ##    Définit notre niveau d'erreur
        private function setErrReport()
            {
            self :: getErrReport();
            error_reporting($this -> ErrorReporting ^ E_WARNING);
            }
       
        ##    Ferme la connexion à la base <==> mysql_close
        public function close()
            {
            if(isset( $this -> connx ) && is_resource( $this -> connx ))
                {
                try
                    {
                    if(mysql_close($this -> connx) === FALSE)
                        {
                        $message = sprintf($this -> _message['CANT_CLOSE'], (isset($host) ? $host : 'localhost'), mysql_errno(), mysql_error());
                        throw new exception($message);
                        }
                    }
                catch(Exception $e)
                    {
                    die(xhtml::_error('ERREUR :: Bdd', 'pages/styles.css', $e->getmessage()));
                    }
                }
            }
                   
        ##    Sélectionne la base de données <==> mysql_select_db
        public function select_db($base)
            {
            if(isset( $this -> connx ) && is_resource( $this -> connx ))
                {
                try
                    {
                    if(mysql_select_db($base, $this -> connx) === FALSE)
                        {
                        $message = sprintf($this -> _message['CANT_SELECT_DB'], (isset($base) ? $base : 'UNDEFINED'), mysql_errno(), mysql_error());
                        throw new exception($message);
                        }
                    else
                        {
                        return true;
                        }
                    }
                catch(Exception $e)
                    {
                    die(xhtml::_error('ERREUR :: Bdd', 'pages/styles.css', $e->getmessage()));
                    }
                }
            }

        ##    Lance une requête à la base de données <==> mysql_query
        public function query($sql)
            {
            $bench = microtime(true);
            try
                {
                $this -> compte = count( $this -> sql) + 1;
                $this -> sql[ $this -> compte ] = $sql;
                                if( $this -> resultat mysql_query($this -> sql[ $this -> compte ], $this -> connx) FALSE )
                    {
                    $message = sprintf($this -> _message['ERROR_QUERY'], $this -> compte, $this -> sql[ $this -> compte ], mysql_errno(), mysql_error());
                    throw new exception($message);
                    }
                else
                    {
                    if(isset($this -> resultat) && is_resource($this -> resultat))
                        {
                        $this -> bench[ $this -> compte ] = microtime(true) - $bench;
                        echo $this->resultat;
                        return $this -> resultat;
                        }
                    else
                        {
                        $message = sprintf($this -> _message['ERROR_QUERY_RES'], $this -> compte, $this -> sql[ $this -> compte ], mysql_errno(), mysql_error());
                        throw new exception($message);
                        }
                    }
                }
            catch(Exception $e)
                {
                die(xhtml::_error('ERREUR :: Bdd', 'pages/styles.css', $e->getmessage()));
                }
           
            }
       
       
        ##    Retourne une ligne de résultat MySQL sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
        public function fetch_array()
            {
            return mysql_fetch_array( $this -> resultat);
            }

        }
       

?>

PS. Je sais que pour la portabilité de mon code, je devrais faire une abstraction de ma classe mais vu que pour l'instant ya bug on verra plus tard :)

PPS.  Merci d'avance

7 réponses

Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010

Bon,

En fait, j'ai décidé d'arrêter d'être blond

Alors :





if( $this -> resultat <gras>mysql_query($this -> sql[ $this -> compte ], $this -> connx) FALSE )</gras>



Cela ne fonctionne pas, alors :





$this -> resultat = mysql_query($this -> sql[ $this -> compte ], $this -> connx);

if( $this -> resultat )


Ca ça fonctionne !

Auto correction

Flo
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
if( $this -> resultat = mysql_query($this -> sql[ $this -> compte ], $this -> connx) === FALSE )

>
if ( ($this->resultat mysql_query(....) ) FALSE ) {
       // erreur.
} else {
      // Ok
}
Messages postés
198
Date d'inscription
lundi 28 février 2005
Statut
Membre
Dernière intervention
14 novembre 2008
1
Perso, je préfère utiliser mysql_fetch_assoc()
Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010

Lol

Ok je vais tester avec _assoc mais je suis pas sur que ce soit la qu'est le probléme... c'est plutôt comme si, lors de mon query, this->resultat n'enregistrait rien, je sais pas comment l'expliquer.

Flo
Messages postés
198
Date d'inscription
lundi 28 février 2005
Statut
Membre
Dernière intervention
14 novembre 2008
1
Euh c'était juste un avis perso mais d'après moi c'est plsu facile à comprend avec mysql_fetch_assoc et de plus, je suis mauvais en prog POO.
@++ mec.
Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010

Re

En fait je réagit à ça que maintenant mais

mysql_fetch_assoc($ressource) = mysql_fetch_array($ressource, MYSQL_ASSOC)

Bon c'est pas ça non plus

Flo
Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010

OK,

il me manquait une paiare de parenthèses. je le saurais pour la suite. merci

Flo