[MySQLi et Classe] "Call to a member function or a non-object"

"Call to a member function or a non-object" [MySQLi et Classe] - PHP - Programmation

Marsh Posté le 05-04-2006 à 19:11:34    

Bonjour :)  
 
Je débute en POO avec PHP5 et Mysqli :D  
Comment faire pour utiliser l'objet mysqli dans une autre classe ?
 
PHP m'affiche en effet le message d'erreur suivant:
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\[...]\includes\forum.class.php on line 9
Mon code:

Code :
  1. class Forum
  2. {
  3.   var $temp;
  4.   function getCatFromId($id)
  5.   {
  6.     if ($this->temp = $MySQLi->query('SELECT * FROM `categories` WHERE `id` = '.$id))
  7.       return $this->temp->fetch_assoc();
  8.     else
  9.       return false;
  10.   }
  11.   function getForumFromId($id)
  12.   {
  13.     if ($this->temp = $MySQLi->query('SELECT * FROM `forums` WHERE `id` = '.$id))
  14.       return $this->temp->fetch_assoc();
  15.     else
  16.       return false;
  17.   }
  18.   function getTopicFromId($id)
  19.   {
  20.     if ($this->temp = $MySQLi->query('SELECT * FROM `topics` WHERE `id` = '.$id))
  21.       return $this->temp->fetch_assoc();
  22.     else
  23.       return false;
  24.   }
  25.   function getMemberFromId($id)
  26.   {
  27.     if ($this->temp = $MySQLi->query('SELECT * FROM `members` WHERE `id` = '.$id))
  28.       return $this->temp->fetch_assoc();
  29.     else
  30.       return false;
  31.   }
  32. }


...
Et dans un autre fichier:

Code :
  1. $MySQLi = new mysqli('*******', '******', '*******', '********');
  2. if (mysqli_connect_errno())
  3. {
  4. printf("<p>Echec de la connexion : %s</p>", mysqli_connect_error());
  5. exit();
  6. }
  7. require_once('includes/forum.class.php');
  8. $Forum = new Forum();


 
La ligne 9 est celle où on retrouve l'appel à $MySQLi->query
 
 
Merci de vos futures réponses :whistle:  :whistle:


Message édité par MS-DOS_1991 le 05-04-2006 à 19:12:33

---------------
Viendez sur le Newbie-Project et essayez le Newbie-Directory (nouveau)
Reply

Marsh Posté le 05-04-2006 à 19:11:34   

Reply

Marsh Posté le 06-04-2006 à 08:02:41    

Ta classe $MySQLi n'est pas connue de ta classe Forum
 
3 choix  
-Créer un objet mysqli dans ta class forum lors du constructeur
[$this->con_sql = new mysqli(..)
 
-Dans tes méthodes appeler une méthode qui te retourne le pointeur MySQLi
 
-Passer le $MySQLi existant en variable globale [mais ca s'est tres sale]  

Reply

Marsh Posté le 23-10-2008 à 17:01:00    

Bonjour,
 
 
Moi aussi j'ai le même problème ("Fatal error: Call to a member function query() on a non-object in [...]" ), mais j'ai bien mis la classe mysqli dans ma classe ;-(
 
Je pense que c'est une histoire de droit ou de mauvais héritage des fonctions ? Une idées ?  
 
<?php
class classeBdd {
 private $serveurSQL;
 private $userSQL;
 private $passSQL;
 private $baseSQL;
 private $mysqli;
 private $requete;
 private $result;
 
 function classeBdd($host, $user, $pass, $base) {
  $this->serveurSQL = $host;
  $this->userSQL = $user;
  $this->passSQL = $pass;
  $this->baseSQL = $base;
  $this->mysqli = NULL;
 }
 
 public function connect($db) {
  if( $db != NULL ) {
   $this->mysqli = new mysqli($this->serveurSQL, $this->userSQL, $this->passSQL, $this->baseSQL);
   if ( !$this->mysqli ) {$this->erreur('Connexion impossible à la base de données. Appuyez sur la touche F5 de votre clavier.');}
  }
 }
 
 public function requete($requete, $i) {
  $this->requete = $this->mysqli->query($requete);
  if( !$this->requete ) {$this->erreur('Impossible d\'effectuer la requête.');}
 }
 
 public function fetchAssoc($i) {
  $temp = $this->mysqli->fetch_assoc();
  return $temp;
 }
 
 public function getNbLignes($i) {
  $temp = $this->mysqli->num_rows();
  return $temp;
 }
 
 public function getNbModifs() {
  $temp = $this->mysqli->affected_rows();
  return $temp;
 }
 
   
 public function deconnect() {
  $this->mysqli->close();
 }
 
 public function erreur($erreur) {
  echo '<div align="center"><table border="1" cellpadding="0" cellspacing="0" width="300" height="100" bordercolor="#CC0000">
              <tr><td valign="middle" bgcolor="#FAFAFA"><p align="center"><strong><font face="Verdana" size="2"><u><font color="#CC0000">Erreur : '.$erreur.'</font></u> </font></strong></td>
              </tr></table></div>';
 }
}
?>
 
 
Merci d'avance.
Cordialement
Nicolas

Reply

Marsh Posté le 24-10-2008 à 09:34:18    

Je viens de tester ton truc à part des trucs foireux ca marche
 

Code :
  1. <tontrucici
  2. $con = new classeBdd('localhost', 'root', NULL, NULL);
  3. $con->connect('test');
  4. $con->requete("insert into test(A, B) values ('3','3')", 1);


 
j'ai pas ton msg d'erreur la

Reply

Marsh Posté le 27-10-2008 à 18:28:06    

Bonsoir,
 
 
Merci pour ta réponse.
 
J'ai opté pour la manière simple : j'ai utilisé dans ma classe les fonction mysqli_* à la place le la classe mysqli ;-)
 
 
Cordialement
 

Sebastien a écrit :

Je viens de tester ton truc à part des trucs foireux ca marche
 

Code :
  1. <tontrucici
  2. $con = new classeBdd('localhost', 'root', NULL, NULL);
  3. $con->connect('test');
  4. $con->requete("insert into test(A, B) values ('3','3')", 1);


 
j'ai pas ton msg d'erreur la


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed