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 :

Erreur: Call to undefined method [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Erreur: Call to undefined method
    je développe mon code de connexion, sélection, insertion,.. dans la base de donnée en utilisant MySQLi, j'obtiens l'erreur suivante:

    Fatal error: Call to undefined method Connexion::query() in classes.php on line 66
    voila le code:

    classes.php
    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
     
    public final function toDo($method='', $fields=array(), $table_name='') 
    		{
    			// method: select, create, insert, delete, update, read (CRUD)
    			$this->method = $method;
    			$this->fields = $fields;
    			$this->table_name = $table_name;
     
    			global $r;
    			$this->r = $r;
     
     
    			if(!is_object($r)){echo"<font color='red' size='5'>DB N EST PAS UN OBJET</font>";} else {echo 'is object';}
     
    			switch($this->method)
    				{
    					case 'SELECT':
    					$this->select = "$this->method $fields FROM $this->table_name";
    					echo $this->select;
    					$this->result = $r->query($this->select);
     
    					//$this->query = mysql_query($select) OR DIE (mysql_error());
    					break;					
     
     
    				} // EnD switch
     
    		} // end toDo
    ligne66: $this->result = $r->query($this->select);

    fichier.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    include 'classes.php';
     
    $r = new Connexion($db_host, $db_user, $db_passwd);
    $r->db_name($db_idara);
    $r->toDo('SELECT', '*', 'users_sgroups');
     
    ?>
    merci a vous

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    il n'y a pas de méthode "query" dans ta classe $r.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    il n'y a pas de méthode "query" dans ta classe $r.
    d'apres mes connaissances de base, on prend la variable de constructeur qui est dans mon cas $r:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $r = new Connexion($db_host, $db_user, $db_passwd);
    et c'est elle qu'on appelle pour executer le query:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->result = $r->query($this->select);

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    certes mais ou est la methode query ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    certes mais ou est la methode query ?
    voila le code en entier:

    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
    64
    65
    66
    67
    68
    69
    70
    71
     
    class Connexion {
     
    	// connect to the server
    	public function __construct($db_host='', $db_user='', $db_passwd='')
    		{
    			$this->db_host = $db_host;
    			$this->db_user = $db_user;
    			$this->db_passwd = $db_passwd;
    			$this->connexion = $connexion;
     
    			$this->connexion = new mysqli($db_host, $db_user, $db_passwd); //HOST, USER, PASSWORD
     
    				if ($mysqli->connect_error) 
    					{
     						die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    					}
    				/*
    					else
    					{
    						echo 'connected';
    					}
    				*/
    		$char = $this->connexion->set_charset("utf8");
     
    		} // end __construct
     
     
    	// select databse
    	public final function db_name($db_name)
    		{
    			$this->db_name = $db_name;
     
    			$s_db = $this->connexion->select_db($this->db_name);
    			/*
    			if($s_db)
    			{
    				echo 'db selected';
    			}
    			*/
    		} // end db_name
     
     
     
    	public final function toDo($method='', $fields=array(), $table_name='') 
    		{
    			// method: select, create, insert, delete, update, read (CRUD)
    			$this->method = $method;
    			$this->fields = $fields;
    			$this->table_name = $table_name;
     
    			global $r;
    			$this->r = $r;
     
     
    			if(!is_object($r)){echo"<font color='red' size='5'>DB N EST PAS UN OBJET</font>";} else {echo 'is object';}
     
    			switch($this->method)
    				{
    					case 'SELECT':
    					$this->select = "$this->method $fields FROM $this->table_name";
    					echo $this->select;
    					$this->result = $r->query($this->select);
     
    					//$this->query = mysql_query($select) OR DIE (mysql_error());
    					break;					
     
     
    				} // EnD switch
     
    		} // end toDo

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    d'ou sort de $r ?

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    file.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    include 'classes.php';
     
    $r = new Connexion($db_host, $db_user, $db_passwd);
    $r->db_name($db_idara);
    $r->toDo('SELECT', '*', 'users_sgroups');
    ?>
    classes:

    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
     
    class Connexion {
    //codes
     
    public final function toDo($method='', $fields=array(), $table_name='') 
    		{
    			// method: select, create, insert, delete, update, read (CRUD)
    			$this->method = $method;
    			$this->fields = $fields;
    			$this->table_name = $table_name;
    			//$this->r = $r;
     
    			global $r;
     
     
    			switch($this->method)
    				{
    					case 'SELECT':
    					$this->select = "$this->method $fields FROM $this->table_name";
    					echo $this->select;
    					$this->smt = $r->prepare($this->select);
    					$this->result = $r->query($this->smt);
    					echo $this->result;
     
     
    					break;					
     
     
    				} // EnD switch
     
    		} // end toDo
     
    //codes
     
    } end class

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    y'a un probleme de logique dans ta classe pourquoi mettre l'intance dans le $r et récupérér l'instance via cette variable ? utilise $this->connexion

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    y'a un probleme de logique dans ta classe pourquoi mettre l'intance dans le $r et récupérér l'instance via cette variable ? utilise $this->connexion
    je l'ai mis ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    switch($this->method)
    				{
    					case 'SELECT':
    					$this->select = "$this->method $fields FROM $this->table_name";
    					echo $this->select;
    					$this->result = $this->connexion->query($this->select);
    					echo $this->result;
    					break;					
     
     
    				} // EnD switch
    est ce que je vais laisser file.php avec sa variable $r:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $r = new Connexion($db_host, $db_user, $db_passwd);
    $r->db_name($db_idara);
    $r->toDo('SELECT', '*', 'users_sgroups');

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    avec bind_result, il faut noter le nombre de champs selectionnes par la requete et le lister, si jamais j'ai mis: SELECT *, et je ne veux pas lister mes dizaines de champs dans bin_result(champs1, champs2, champs3, ... champs10), est ce qu'il y a une autre methode de les citer?

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par isitien Voir le message
    avec bind_result, il faut noter le nombre de champs selectionnes par la requete et le lister, si jamais j'ai mis: SELECT *, et je ne veux pas lister mes dizaines de champs dans bin_result(champs1, champs2, champs3, ... champs10), est ce qu'il y a une autre methode de les citer?
    pas besoin de bind fait un fetch classique

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pas besoin de bind fait un fetch classique
    ca retourne une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to a member function fetch() on a non-object in classes.php on line 89
    line89: while($this->result->fetch())

    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
     
    switch($this->method)
    				{
    					case 'SELECT':
    					$this->select = "$this->method $fields FROM $this->table_name";
    					//echo $this->select;
    					$this->result = $this->connexion->query($this->select);
    					$this->result = $this->connexion->prepare($this->select);
    					$this->result = $this->result->execute();
     
     
    					break;					
     
     
    				} // EnD switch
     
    		} // EnD toDo
     
     
    public final function displayResults()
    		{	               	
    			//$this->smt->bind_result($id_sgp, $sgp_name_ar);
            	while($this->result->fetch())
            	{
            		if($sgp_name_ar == '')
            		{
            			echo '';
            		}
            		else
            		{
    					echo $id_sgp.': '.$sgp_name_ar.'<br>';        			
            		}
     
            	}
     
    		} // end display_Results
    desole stealth je suis debutant en MySQLi

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    query + preprare + execute ???
    si tu est debutant utilise mysqli comme on utilise l'extension mysql, donc ne t'occupe pas des preprare des execute et des bind, si t'es pas a l'aise en object utilise le en procédural, tu y gagnera a ne pas bruler des etapes

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    query + preprare + execute ???
    si tu est debutant utilise mysqli comme on utilise l'extension mysql, donc ne t'occupe pas des preprare des execute et des bind, si t'es pas a l'aise en object utilise le en procédural, tu y gagnera a ne pas bruler des etapes
    query c'est comme en mysql apres la requete SELECT on met un query, alors pour prepare et execute, j'aurais une condition WHERE que je vais utiliser, et comme pre-cite dans l'autre reponse, eviter les injections,...

    j'ai utilise mysqli en mode procedurale, ca marche et affiche les resultats, je veux l'essayer en mode POO

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par isitien Voir le message
    query c'est comme en mysql apres la requete SELECT on met un query, alors pour prepare et execute, j'aurais une condition WHERE que je vais utiliser, et comme pre-cite dans l'autre reponse, eviter les injections,...

    j'ai utilise mysqli en mode procedurale, ca marche et affiche les resultats, je veux l'essayer en mode POO
    en POO c'est la même chose, mais pareil mais ne t'occupe pas de prepare exceute bind, si tu ne connais pas les requêtes preparés

  16. #16
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    en POO c'est la même chose, mais pareil mais ne t'occupe pas de prepare exceute bind, si tu ne connais pas les requêtes preparés
    stealth c'est tres facile je comprends, c'est juste ces 3 mots qui me derangent, je les ai compris ainsi:

    $var1 = select
    $var2 = var1->query
    $var3 = $var2->prepare
    $var4 = $var3->execute

    ca veut dire, on fait le select, ce select (var1) doit etre en query, alors pour la preparer il faut recuperer la var qui est var2, et pour l'executer on met var3 et pour la mettre en fetch on recuperer la derniere var qui var4, j'ai cru que c'est enchainee

    voila le cas normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public final function displayResults()
    		{	               	
            	while($row = $this->result->fetch_object())
            	{
            		echo $row->id_sgp.' '.$row->sgp_name_ar.'<br>';
     
            	}
     
    		} // end display_Results

  17. #17
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    c'est quoi la difference entre fetch tout simple et fetch_object?

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par isitien Voir le message
    c'est quoi la difference entre fetch tout simple et fetch_object?
    tout est dans la doc

  19. #19
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    le code precedent est generalise sur toutes les requetes SELECT, pour l'affichage ca change, si je prends cette fonction d'affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public final function displayResults()
    		{	               	
            	while($row = $this->result->fetch_object())
            	{
            		echo $row->id_sgp.' '.$row->sgp_name_ar.'<br>';
     
            	}
     
    		} // end display_Results
    je la mets separement apres chaque SELECT, par exemple:

    1er select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    function displayResults()
    		{	               	
            	while($row = $this->result->fetch_object())
            	{
                          echo $var1.$var2;
     
            	}
     
    		} // end display_Results
    dans une 2eme select:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $var1.'<br>';
    echo $var2.'<br>';
    echo $var3.'<br>';
    dans une 3eme select:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $var1.': '. $var2.'<br>';
    echo $var3.'<br>';
    l'affichage est different, comment puis je appeller cette fonction depuis ma classe pour effectuer differents affichages?

  20. #20
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    comment peut on tenir une differente mise en page a chaque fois que l'on le souhaite?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2008, 12h33
  2. Réponses: 1
    Dernier message: 18/07/2008, 06h57
  3. [Artichow] Call to undefined method Graph::getDrawer()
    Par belocom dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 17/04/2008, 22h56
  4. Réponses: 0
    Dernier message: 25/02/2008, 17h28
  5. Erreur : Call to undefined function
    Par charrier63 dans le forum Langage
    Réponses: 6
    Dernier message: 14/10/2006, 18h12

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