probleme avec mysql passer à l'objet ...

Mammouth du PHP | 843 Messages

07 sept. 2007, 09:09

J'ai fini par trouver :)

en faite il y avait un problème lorsque j'appelai ma methode close depuis mon destructeur...
en gros, quand mysql_close est appeler au destructeur, on pert $this->link et je ne comprend toujour pas pourquoi :?

j'ai fait ainsi et tout fonctionne:
<?php
require("../../nowww/data.php");
/**
 * Classe de connection aux base de données MySQL
 *
 * CONNEXION SERVER MySQL:    $connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db);
 * SELECTION DB:              $connecteur_db->select_db($identifiant_db);
 * REQUETE:                   $result = $connecteur_db->query($query);
 * DECONNECTION SERVER MySQL: $connecteur_db->close();
 */
class brts_connecteur_db
{
   /**
   * on definit les propriétés passées à la dite classe
   */

   /**
   * Nom d'hote MySQL
   *
   * @staticvar string
   */
   private $host_db;

   /**
   * Nom d'utilisateur MySQL (login)
   *
   * @staticvar string
   */
   private $user_db;

   /**
   * Mot de pass MySQL
   *
   * @staticvar string
   */
   private $pass_db;

   /**
   * Nom de db beroots
   *
   * @staticvar string
   */
   private $beroots_db;

   /**
   * Nom de db client
   *
   * @staticvar string
   */
   private $client_db;

   /**
   * Connection active au server MySQL
   *
   * @var Float
   */
   private $link;

   /**
   * Constructeur
   *
   * Definit les propriété de connection au server MySQL
   *
   * @param string $host_db
   * @param string $user_db
   * @param string $pass_db
   * @param string $beroots_db
   * @param string $client_db
   */
   public function __construct($host_db, $user_db, $pass_db, $beroots_db, $client_db)
   {
      $this->host_db      = $host_db;
      $this->user_db      = $user_db;
      $this->pass_db      = $pass_db;
      $this->beroots_db   = $beroots_db;
      $this->client_db    = $client_db;
      $this->connect();
   }
   /**
   * Destructeur
   *
   * On efface les propriétés de la classe
   */
   public function __destruct()
   {
      unset($this->host_db);
      unset($this->user_db);
      unset($this->pass_db);
      unset($this->beroots_db);
      unset($this->client_db);
      unset($this->link);
   }
   /**
   * NOM DE LA FONCTION: connect()
   *
   * On établit une connexion au server MySQL
   */
   private function connect()
   {
      $this->link = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die('Erreur SQL !<br />'.$this->link.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: close()
   *
   * On ferme la connexion au server MySQL et on appel le destructeur
   */
   public function close()
   {
      mysql_close($this->link);
      $this->__destruct();
   }
   /**
   * NOM DE LA FONCTION: select_db($identifiant_db)
   *
   * On fournie un identifiant de base de données (beroots ou client), et on est connecté à cette db.
   *
   * @param string $use_db
   */
   public function select_db($identifiant_db)
   {
      if($identifiant_db == 'beroots')
      {
         $use_db = $this->beroots_db;
      }
      elseif($identifiant_db == 'client')
      {
         $use_db = $this->client_db;
      }
      $selected_db = mysql_select_db($use_db, $this->link) or die('Erreur SQL !<br />'.$selected_db.'<br />'.mysql_error());
   }
   /**
   * NOM DE LA FONCTION: query($query)
   *
   * on fournit une requete MySQL et on retourne le resultat de celle-ci.
   *
   * @param string $query
   * @return float $result_mysql
   */
   public function query($query)
   {
      $result_mysql = mysql_query($query) or die('Erreur SQL !<br />'.$result_mysql.'<br />'.mysql_error());
      return $result_mysql;
   }
}
/**
 * Classe de récuperation des infos webmaster, client, et des options du site
 *
 * INSTANCE (connection auto):       $brts_info = new brts_info($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db, $data_table_beroots, $data_table_client, $data_table_options);
 * RECUP INFOS BEROOTS:              $_BRTS = $brts_info->recup_info_brts();
 * RECUP INFOS CLIENT:               $_CLIENT = $brts_info->recup_info_client();
 * RECUP INFOS OPTIONS:              $_OPTIONS = $brts_info->recup_info_options();
 * DESTRUCTEUR:                      $brts_info->__destruct();
 */
class brts_info extends brts_connecteur_db
{
   /**
   * on definit les propriétés passées à la dite classe
   */

   /**
   * Nom de table beroots
   *
   * @staticvar string
   */
   private $table_beroots;

   /**
   * Nom de table client
   *
   * @staticvar string
   */
   private $table_client;

   /**
   * Nom de table options
   *
   * @staticvar string
   */
   private $table_options;

   /**
   * Constructeur
   *
   * Definit les propriété de connection au server MySQL et les noms des tables system
   *
   * @param string $table_beroots
   * @param string $table_client
   * @param string $table_options
   */
   public function __construct($host_db, $user_db, $pass_db, $beroots_db, $client_db, $table_beroots, $table_client, $table_options)
   {
      parent::__construct($host_db, $user_db, $pass_db, $beroots_db, $client_db);
      $this->table_beroots  = $table_beroots;
      $this->table_client   = $table_client;
      $this->table_options  = $table_options;
   }
   /**
   * Destructeur
   *
   * Efface les propriétés passer à la dite classe
   */
   public function __destruct()
   {
      unset($this->table_beroots);
      unset($this->table_client);
      unset($this->table_options);
   }
   /**
   * NOM DE LA FONCTION: close()
   *
   * On appel la fonction close de la classe mère pour destruction de celle-ci et on appel le destructeur
   */
   public function close()
   {
      parent::close();
      $this->__destruct();
   }
   /**
   * NOM DE LA FONCTION: recup_info_brts()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table beroots de la base beroots.
   */
   public function recup_info_brts()
   {
      // on ce connecte à la db beroots
      parent::select_db('beroots');
      // on recupere tout le contenu de la table beroots
      $result = parent::query("SELECT * FROM `".$this->table_beroots."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_client()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table client de la base client.
   */
   public function recup_info_client()
   {
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_client."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      return $var;
   }
   /**
   * NOM DE LA FONCTION: recup_info_options()
   *
   * SORTIE:
   * On recupere un tableau associatif des données presente dans la table option de la base client.
   */
   public function recup_info_options()
   {
      // on ce connecte à la db client
      parent::select_db('client');
      // on recupere tout le contenu de la client
      $result = parent::query("SELECT * FROM `".$this->table_options."` WHERE id = 1");
      $var = mysql_fetch_assoc($result);
      return $var;
   }
}

// on effectue des requetes depuis la classe
$connecteur_db = new brts_connecteur_db($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db);
$connecteur_db->select_db('client');
$result = $connecteur_db->query("OPTIMIZE TABLE private_table_membre");
$connecteur_db->close();

// on effectue des requetes depuis la classe fille
$brts_info = new brts_info($data_host_db, $data_user_db, $data_pass_db, $data_beroots_db, $data_client_db, $data_table_beroots, $data_table_client, $data_table_options);
$_BRTS = $brts_info->recup_info_brts();
$_CLIENT = $brts_info->recup_info_client();
$_OPTIONS = $brts_info->recup_info_options();
$brts_info->close(); 

// on affiche
print_r($_BRTS);
echo '<br />';
print_r($_CLIENT);
echo '<br />';
print_r($_OPTIONS);
echo '<br />';
?>
un destructeur est pratique pour fermer les ressources ouvertes: fichiers, connexions vers des server de bases de données...
1°) si quelqu'un peut me dire pourquoi je pert $this->link quand je passe par le destructeur et pourquoi il ne se pert pas lorsque je l'appel dans une fonction close() public?
Ps. si quelqu'un voit un moyen de definir un destructeur digne de ce nom pour fermer cette connexion au server mysql sans génerer d'erreur? (regarder uniquement pour ce qui est de la classe mère car le problème est similaire pour la classe fille ;) )

2°) quelqu'un peut il ne dire si la syntaxe de mes classes est maintenant correct (surtout au niveau de la nom definition de certains attibut passer à la classe fille pour le constructeur de la classe mère)?

Merci d'avance ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 843 Messages

09 sept. 2007, 19:48

j'ai regarder dans des classes existantes de gestion de MySQL et c'est pareil... il appel tous mysql_close depuis une fonction autre que le destructeur (peut être une incompatibilité des deux fonctions, je sait pas...).

enfin cela fonctionne donc je continu sur ma lancer...
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non: