Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 13h38   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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:

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

classes.php
Code :
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 14h01   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
il n'y a pas de méthode "query" dans ta classe $r.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 15h57   #3
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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 :
1
2
 
$r = new Connexion($db_host, $db_user, $db_passwd);
et c'est elle qu'on appelle pour executer le query:

Code :
1
2
 
$this->result = $r->query($this->select);
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 16h31   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
certes mais ou est la methode query ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 17h28   #5
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par sabotage Voir le message
certes mais ou est la methode query ?
voila le code en entier:

Code :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 20h25   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
d'ou sort de $r ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 20h37   #7
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
file.php:

Code :
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 21h11   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/05/2011, 22h42   #9
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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 :
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 :
1
2
3
4
 
$r = new Connexion($db_host, $db_user, $db_passwd);
$r->db_name($db_idara);
$r->toDo('SELECT', '*', 'users_sgroups');
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 10h47   #10
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 11h47   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 12h10   #12
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
Citation:
Envoyé par stealth35 Voir le message
pas besoin de bind fait un fetch classique
ca retourne une erreur:

Code :
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 12h53   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 13h01   #14
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 13h07   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 13h19   #16
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
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 :
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
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 13h20   #17
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
c'est quoi la difference entre fetch tout simple et fetch_object?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 13h38   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par isitien Voir le message
c'est quoi la difference entre fetch tout simple et fetch_object?
tout est dans la doc
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 20h03   #19
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
le code precedent est generalise sur toutes les requetes SELECT, pour l'affichage ca change, si je prends cette fonction d'affichage:

Code :
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 :
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 :
1
2
3
4
 
echo $var1.'<br>';
echo $var2.'<br>';
echo $var3.'<br>';
dans une 3eme select:

Code :
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?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 11h17   #20
Membre du Club
 
Inscription : janvier 2007
Messages : 410
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 410
Points : 56
Points : 56
comment peut on tenir une differente mise en page a chaque fois que l'on le souhaite?
isitien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h18.


 
 
 
 
Partenaires

Hébergement Web