Problème avec mysql_fetch_array

Résolu
cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010 - 1 févr. 2007 à 01:26
cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010 - 5 févr. 2007 à 23:13
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

cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010
5 févr. 2007 à 21:09
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
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
5 févr. 2007 à 23:09
if( $this -> resultat = mysql_query($this -> sql[ $this -> compte ], $this -> connx) === FALSE )

>
if ( ($this->resultat mysql_query(....) ) FALSE ) {
       // erreur.
} else {
      // Ok
}
3
Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
5 févr. 2007 à 08:48
Perso, je préfère utiliser mysql_fetch_assoc()
0
cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010
5 févr. 2007 à 10:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
5 févr. 2007 à 12:54
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.
0
cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010
5 févr. 2007 à 14:10
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
0
cs_mfaraday Messages postés 144 Date d'inscription vendredi 18 avril 2003 Statut Membre Dernière intervention 4 janvier 2010
5 févr. 2007 à 23:13
OK,

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

Flo
0
Rejoignez-nous