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 />';
?>
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?un destructeur est pratique pour fermer les ressources ouvertes: fichiers, connexions vers des server de bases de données...
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