classe + lien vers une DB prob incompréhenssible (resolu)

classe + lien vers une DB prob incompréhenssible (resolu) - PHP - Programmation

Marsh Posté le 02-06-2005 à 18:39:26    

Bonjour,  
 
je fais appel à vous car j'ai beau lire et relire mon code, je ne vois absolument pas pourquoi ca fait ca.
Je m'explique. J'ai une classe "query"  qui sert a executer des requetes sql et a enregistrer le msg d'erreur si il y en a 1.
 
Le prob c'est qu'au niveau du mysql_error($this->db_link);  Ca merde, il me dit que le link est pas valable, du moins a cet endroit la de la classe, hors, si je le teste dans le constructeur de la classe, il est valide! pourquoi d'une fonction a l'autre une variable changerait elle sans qu'on y apporte une modification??? Alors que c'est un attribut de la classe ya pas de raisons...
 
Bref voila ma classe :  
 
 

Code :
  1. <?php
  2. class query {
  3.  var $query;
  4.  var $num_rows=0;
  5.  var $error=NULL;
  6.  var $result=NULL;
  7.  var $db_link=NULL;
  8.  // Constructeur
  9.  function query($link, $q=NULL) {
  10.   if($q) {
  11.    $this->query=$q;
  12.    $this->exec($this->query);
  13.   }
  14.   $this->db_link=&$link;
  15.   // ICI $this->db_link valide
  16.  }
  17.  /* Execute une requete SQL et en retourne le résultats */
  18.  function exec($q=NULL) {
  19.   // ICI $this->db_link n'est plus valide !!!!!!!!!!!!!!!!!!!!!!  
  20.   if($q) $this->query=$q; // Si on recoit une nouvelle requete on la change    
  21.   if(!$res=@mysql_query($this->query, $this->db_link)) $this->error=mysql_error($this->db_link);
  22.   else {
  23.    $this->result=&$res;
  24.    $this->num_rows=mysql_num_rows($this->result);
  25.   }
  26.  }
  27.  /* Recois un indice et retourne l'enregistrement qui correspond au resultats, retourne false en cas d'erreur */
  28.  function row($i=1) {
  29.   $i--;
  30.   if($i<0) return false;
  31.   if(!@mysql_data_seek($this->result, $i)) return false;
  32.   if(!$row=@mysql_fetch_object($this->result)) return false;
  33.   return $row;
  34.  }
  35.  /* Cette fonction reinitialise toutes les variables de l'objet */
  36.  function reset() {
  37.   $this=new query($this->db_link);
  38.  }
  39. }
  40. ?>


 
Pour verifier si le link est valide j'execute une petite requete avec mysql_query($req, $this->db_link);
 
Et donc a l'endroit commenté ca marche dans le constructeur, et pas dans la fonction exec().
 
C'est incohérent. Si qqun a une explication ou voit l'erreur......
Parce que moi là je sature :/
 
Merci


Message édité par Gat$ le 02-06-2005 à 19:13:37
Reply

Marsh Posté le 02-06-2005 à 18:39:26   

Reply

Marsh Posté le 02-06-2005 à 18:45:01    

t'a appelé le constructeur avant?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-06-2005 à 19:09:39    

Oui le constructeur est appelé en premier car je met la requete et le db link... c ca qui est fou

Reply

Marsh Posté le 02-06-2005 à 19:12:35    

mhhh je viens de trouver en effet je fais : $this->db_link=&$link; apres l'execution de la requete...
boulet que chui.
 
Merci

Reply

Sujets relatifs:

Leave a Replay

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