Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2008, 11h16   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 33
Points : 17
Points : 17
Par défaut [POO] class connexion et gestion BDD

Bonjour,

Je souhaite me lancer réellement dans la POO en php.
Je cherche à créer une class de connexion, à une BDD de type inconnu pour PHP, qui va gérer l'ouverture d'une connexion, l'exécution d'une requête et la fermeture d'une connexion à une base (via source de données ODBC).

Je n'arrive pas à trouver un tutoriel clair qui traite du sujet (je ne trouve que pour MySql). Je ne souhaite pas trouver un code tout fait car je veux comprendre le principe et avoir un code propre et minimaliste.

J'ai fais un petit essaie mais il n'est pas concluant et je dois avouer que je ne comprend pas ce qui cloche.

La class (elle ne gère que la connexion pour le moment, j'avance pas à pas)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?PHP
 
class cnxOdbc {
 
  private $cnxHost;
  private $cnxUser;
  private $cnxPass;
 
  function __construct ($host,$user,$pass) {
 
    $this->cnxHost = $host;
    $this->cnxUser = $user;
    $this->cnxPass = $pass;    
 
  }
 
  function connexion () {
 
    odbc_connect($this->cnxHost, $this->cnxUser, $this->cnxPass)
      or die('<P align="center"><FONT color="red">Impossible de se connecter au serveur</FONT></P><BR>');
 
  }
 
  function deconnexion () {
 
    odbc_close();
 
  }   
 
}
?>

La page où j'instancie cette class et tente une requête simple.
Code :
1
2
3
4
5
6
7
8
9
10
11
<?PHP
REQUIRE_ONCE('libs/connexion.class.inc');
 
$cnx = new cnxOdbc('source','user','pass');
$cnx->connexion();
 
$rqtTest = odbc_exec($cnx,'SELECT libelle FROM uneTable WHERE ID = 123');
 
ECHO odbc_result ($rqtTest, 'libelle');
 
?>
Il me retourne cette erreur : Warning: odbc_exec(): supplied argument is not a valid ODBC-Link resource in C:\wamp\www\test\test.php on line 8


Au final j'aimerai que cette class gère la totalité de l'accès aux données de mon projet. Elle devra prendre en charge :
- Ouverture d'une connexion
- Exécution de requête (INSERT/UPDATE, SELECT, DELETE) passé en paramètre
- Renvoie du résultat dans une variable array afin de ne manipuler que cette variable (ça aussi c'est pas gagné -_-)
- Fermeture de la connexion

Pour le moment mon projet fonctionne mais il n'est pas du tout objet .
Auriez-vous une référence simple pour m'aider à comprendre le principe ?
Melaus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 12h27   #2
Invité de passage
 
Inscription : avril 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 3
Points : 2
Points : 2
Bonjour,

ce que je te conseille de faire, si tu veux passer par le tout objet, est de créer une méthode permettant d'exécuter les requêtes depuis la classes, en ajoutant comme attribut de la classe la ressource de connexion. Voici comment je modifierais ton code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
 
class cnxOdbc {
 
  private $cnxHost;
  private $cnxUser;
  private $cnxPass;
  private $cnxLink;
 
  public function __construct ($host,$user,$pass) {
    $this->cnxHost = $host;
    $this->cnxUser = $user;
    $this->cnxPass = $pass;    
  }
 
  public function connexion () {
    $this->cnxLink = odbc_connect($this->cnxHost, $this->cnxUser, $this->cnxPass)
      or die('<P align="center"><FONT color="red">Impossible de se connecter au serveur</FONT></P><BR>');
 
    if (!$this->cnxLink) {
      // La connexion a echoue
      return false;
    } else {
      return true;
    }   
  }
 
  public function deconnexion () {
    odbc_close($this->cnxLink);
  }
 
  public function executer($requete) {
    return odbc_exec($this->cnxLink, $requete);
  }
}
?>
Et après, au niveau de ton traitement :

Code :
1
2
3
4
5
6
7
8
9
10
<?php
REQUIRE_ONCE('libs/connexion.class.inc');
 
$cnx = new cnxOdbc('source','user','pass');
$cnx->connexion();
$donnees = $cnx->executer('SELECT libelle FROM uneTable WHERE ID = 123');
 
// ...
 
?>
Bon c'est loin d'être complet, mais ça pourra peut être t'aider pour continuer !
killian-ebel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 14h03   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 33
Points : 17
Points : 17
Oh merci beaucoup !! Ta modification est tout à fait ce que je cherche à obtenir.
Grâce à toi je comprends bien mieux.


Il reste un détail, tu peux sans doutes m'aider à choisir la manière la moins usine à gaz de faire.

Une fois une requête SELECT exécutée, je peux obtenir le résultat avec un simple ECHO odbc($donnees,'libelle');

Ce qui m'embête c'est d'utiliser une commande odbc dans mon traitement. J'aimerai utiliser quelque chose de plus "générique" afin de réellement séparer le traitement de l'accès aux données.

Je pense alimenter une variable array au sein même de la class et accéder au résultat en listant ma variable. (Les SELECT que j'ai à faire ne concerne presque jamais les mêmes tables ni le même nombre de colonne).

Je vois bien une solution avec une boucle WHILE mais j'ai peur d'alourdir fortement la chose.
Melaus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h16.


 
 
 
 
Partenaires

Hébergement Web