Bonjour,
Je me suis mis à PDO depuis quelques mois tout en me mettant à la POO (php5) et j'en suis arrivé à avoir développé deux objets personnels qui manipulent PDO :
- DBConnexion()
- DBRecord()
DBConnexion est un objet qui créer une instance PDO, il ouvre une connexion à une base de données.
DBRecord est un objet que je créer pour chacune des requêtes que j'effectue. Il me permet de disposer d'autant de traitements de suivi que je souhaite pour chaque manipulation sur la base de données.
Voici un exemple simplifié de l'utilisation de mes objets :
conf.php :
index.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 define('_USER', "machin"); define('_PASS', "bidule"); define('_DATABASE', "dbsecret"); define('_DSN1', "mysql:host=localhost;dbname="._DATABASE); // Je ne créer toujours qu'un seul et unique objet DBConnexion $cnx = new DBConnexion(_USER, _PASS, _DSN1, $pdo_conf_cnx); // $pdo_conf_cnx est un array qui contient plusieurs booléen que je // contrôle au sein de mes 2 objets // si mode DEBUG actif par exemple j'affiche les erreurs sur l'objet PDO avec // les Exceptions e->getMessage() etc... // si mode ACTION actif j'affiche toutes les actions qui s'effectuent // si mode LOG actif je loggue les erreurs // etc...
J'utilise toutes les fonctions PDO au sein de mes objets : FetchColumn CountRows(), prepare(), BindParam(). Tout fonctionne bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 require("conf.php"); // j'ouvre une connection, DBconnexion créer un objet PDO if ($cnx->connect()) { // Je prépare un objet de requête en lui passant la connexion courante $rec_usr = new DBRecord($cnx->pdo); $req = "SELECT usr_id FROM user WHERE usr_log = ".q($login); $req = $rec_usr->read($req); // SELECT==>read() = pdo->query() // INSERT ou UPDATE ==>write() = pdo->exec() // etc... if ($req) { $resultat = $rec_usr->fetch_assoc($req); // = FetchAll ( en mode ASSOC ); $_SESSION["ID_login"] = $resultat[0]["usr_id"]; } } else { redirect_db_error(); }
J'apprécie très nettement leur utilisation et je me vois mal m'en défaire maintenant.
Question 1 :
- Sachant que je les aient créés pour pouvoir EFFECTUER DES TRAITEMENTS DE SUIVI ET DE CONTROLE pour chaque manipulation sur la base de données, est-ce judicieux selon vous ? Je manque de notions Objet pour évaluer mon développement.
Question 2:
- Etant donné que l'objet PDO est natif une fois activé, ai-je créer une limitation à son utilisation en l'ayant encapsulé dans deux objets ? Par exemple si je veux créer une classe utilisateur, je vais devoir utiliser mes objets au sein de cette classe plutôt que de directement utiliser PDO. Quelque part je me dis que j'ai peut-être "réinventé la roue" mais je ne pense pas vu que mon code est nettement allégé par rapport à une utilisation de PDO sans passer par mes objets.
Merci
A+
Partager