[POO]Classes PHP et connexion MySQL

Résolu
ViDikk Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   -  
Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis en face d'un petit soucis de compréhension.
Je suis en train d'intégrer de l'objet (je débute avec ce type de prog) dans un site réalisé en procédural (ou évènementiel pour certains). Ma première classe concerne la gestions des utilisateurs. Tout fonctionne, mais un truc me titille.
Voici mon constructeur :

 public function __construct($id = false){ 
  // Récupération de l'user dans la BDD 
  $this->connexion = new mysqli('localhost', 'root', 'password', 'ma_base'); 
  if($id){ $this->SelectionUtilisateur($id); } 
 } 


Vous remarquez que je me connecte à la BDD pour ensuite faire mes requêtes. Ce qui m'inquiète, c'est qu'au moment où je vais créer plusieurs objets et d'autres classes, je vais refaire la même chose lorsque je devrais me connecter à ma BDD... Et cela va générer plusieurs connexion simultanées !

Seulement, je n'arrive pas à visualiser comment avoir une seule connexion pour toutes les classes, afin qu'elles gèrent directement les requêtes...

Merci d'avance pour votre aide !
A voir également:

5 réponses

Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   20
 
Salut,

Si tu utilises ta bdd juste dans le constructeur, tu peux la fermer à la fin de celui-ci.

Perso quand je fais un site, j'inclus toutes mes pages dans une principale et j'ouvre ma connexion au début de celle ci et je la referme à la fin.
2
Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   20
 
Pour ma part, j'ai ma page accueil.php
au début j'ouvre ma bdd
$bd-> new Bd();

puis là j'appel mes pages en fonction de l'url
include('...');

Et je ferme ma bdd;
$bd->fermerBd();

si dans mes fonctions ou constructeurs j'ai besoin d'acceder à ma bdd je n'ai plus qu'à faire.

imaginons que je suis dans une page où j'ai besoin de ma classe utilisateur

public class utilisateur {  
    function mafonction(){  
        global $bd; // global signifie que j'utilise la même variable que celle existante (la ca va me chercher celle de ma page principale)  
       $bd->executer....('SELECT ...');  
} 


Et donc là je n'ai créé qu'une seule instance de mon objet bd()..

Donc je pense que ta solution est l'utilisation du critère 'global'.
2
ViDikk Messages postés 69 Date d'inscription   Statut Membre Dernière intervention  
 
Hello Aktayen,

Tout d'abord merci d'avoir pris le temps de me répondre :).

Ensuite, ma BDD n'est pas seulement utilisée dans mon constructeur, mais dans toute la classe. Par exemple, j'ai une fonction Enregistrer :

// Enregistre le contact dans la BDD
	public function Enregistrer(){
		if(!$this->id){
			$this->connexion->query("INSERT INTO user VALUES ('', 1, '". $this->utilisateur ."', '". $this->motdepasse ."', '". $this->nom ."', '". $this->prenom ."', '". $this->email ."', '". $this->telfixe ."', '". $this->telport ."')");
		}else{
			$this->connexion->query("UPDATE user SET utilisateur='". $this->utilisateur ."', niveau_admin=". $this->niveau .", nom='". $this->nom ."', prenom='". $this->prenom ."', email='". $this->email ."', tel_fixe='". $this->telfixe ."', tel_port='". $this->telport ."' WHERE user_id=". $this->id);
		}
		return $this->connexion->error ? "Echec de l'enregistrement." : "Enregistré !";
	}


De plus, la technique que tu me conseille est déjà mis en place (j'ai un fichier connexion.php qui est inclus à chaque fois). Mais je trouve pas ca super propre non plus, de faire un include de connexion.php dans toutes mes classes...
0
ViDikk Messages postés 69 Date d'inscription   Statut Membre Dernière intervention  
 
En effet, le "global" est ma solution !

<?
for($i=1; $i<=1000; $i++){
    echo "Merci Aktayen !!";
    echo "<br />";
}
?>

:D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Aktayen Messages postés 189 Date d'inscription   Statut Membre Dernière intervention   20
 
Mais de rien,

Marque ton sujet comme résolu ;)
0