[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 -
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 :
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 !
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:
- [POO]Classes PHP et connexion MySQL
- Gmail connexion - Guide
- Connexion chromecast - Guide
- Gmail connexion autre compte - Guide
- Site inaccessible n'autorise pas la connexion - Guide
- Mysql community server - Télécharger - Bases de données
5 réponses
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.
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.
Pour ma part, j'ai ma page accueil.php
au début j'ouvre ma bdd
puis là j'appel mes pages en fonction de l'url
Et je ferme ma bdd;
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
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'.
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'.
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 :
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...
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...
En effet, le "global" est ma solution !
:D
<?
for($i=1; $i<=1000; $i++){
echo "Merci Aktayen !!";
echo "<br />";
}
?>
:D
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question