Bases de données Singleton pour la connexion

Slides:



Advertisements
Présentations similaires
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Advertisements

Introduction Fonctionnement PluginsConfigurationLes données Le framework MAG Framework de conception de canaux complexes Implémente IChannel Possède son.
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 9 Patrick Reuter.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Programmer en JAVA par Tama
PHP5 poo.
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
Programmation Orientée Objet (POO)
Jérôme CUTRONA PHP et bases de données Jérôme CUTRONA 01:07:51 Programmation Web
Jérôme CUTRONA PHP objet Jérôme CUTRONA 01:08:01 Programmation Web
Jérôme CUTRONA PHP PDO Jérôme CUTRONA 01:08:01 Programmation Web
11:37:32 Programmation Web PHP5 objet "avancé" Jérôme CUTRONA
Bases de données Objet singleton pour la connexion
PHP Interface base de données
Bases de données Objet singleton pour la connexion
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Connexion base de données
26 juin 2009LEFEVRE Christophe1 Module raw et connexions distantes.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Langage Oriente Objet Cours 4.
POO-L3 H. Fauconnier1 C) Méthodes: Redéfinition Un classe hérite des méthodes des classes ancêtres Elle peut ajouter de nouvelles méthodes Elle peut surcharger.
JDBC ou comment manipuler une base de données en Java ?
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Structures de données IFT-2000
Projet Génie Logiciel & UML, Bases de Données & Interfaces
Introduction à la programmation II Veronica Diego Mercredi 13 avril 2005.
MySQL Création des sites dynamiques
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
AJAX.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
1 13/06/03DCI Présentation du groupe DCI Nicolas VialaAntoine Jacquet Projet site WEB DESS IF 2 ème itération.
PHP & My SQL.
Programmation Internet en PHP SIL module M12
JavaScript Nécessaire Web.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 285 Cours de Programmation Web : PHP Chapitre 5 : Orienté objet en PHP.
Cours 7 Classes locales Clonage Divers: tableaux.
Jérôme CUTRONA PHP PDO Jérôme CUTRONA 07:21:24 Programmation Web
Tutorat en bio-informatique
PHP 7° PARTIE : PROGRAMMATION OBJET
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Réaliser par: Sadok Amel Cheboui hassiba
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Schéma de conception Factory Method Exemple Sylvain Giroux.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
PHP5 objet "avancé" Jérôme CUTRONA 09:56:48 Programmation Web
AJAX Jérôme CUTRONA 06:28:58 Programmation Web
6ième Classe (Mercredi, 17 novembre) CSI2572
Protocole HTTP, cookies, sessions, authentification
Conception de Site Webs Interactifs Cours 7 Patrick Reuter
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
JDBC (Complément de cours) IFT 3030
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
LES CLASSES ET LES OBJETS
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
Programmation PHP / PDO
Bases de données Singleton pour la connexion
Transcription de la présentation:

Bases de données Singleton pour la connexion Jérôme CUTRONA jerome.cutrona@univ-reims.fr 16:56:28 Programmation Web 2013-2014

Problématique 16:56:28 Programmation Web 2013-2014

Problème posé Développement d'un site nécessitant une BD : Connexion en début de chaque page PHP Requête(s) Déconnexion en fin de chaque page PHP Développement objet d'un site avec une BD : Connexions à divers endroits dans les méthodes Requête(s) à divers endroits dans les méthodes Déconnexion en fin de page PHP à prévoir  Quand doit-on se connecter, se déconnecter ? 16:56:28 Programmation Web 2013-2014

Solution classique : Singleton 16:56:28 Programmation Web 2013-2014

Singleton : objet à instance unique Réalisation : Solution : Singleton Singleton : objet à instance unique Instance unique => connexion unique Réalisation : 1 attribut statique Instance du Singleton 1 point d'accès méthode statique, gère l’unicité de l’instance limiter l'accès au constructeur privé / protégé interdire le clonage 16:56:28 Programmation Web 2013-2014

Solution : Singleton Adaptation à la connexion BD PDO : myPDO 1 attribut statique _PDOInstance, instance de PDO 1 point d'accès Méthode statique getInstance() Instanciation PDO si nécessaire => connexion constructeur privé Interdire la construction destructeur termine la connexion à la BD mise hors service de la méthode __clone throw new Exception("…") ; 16:56:28 Programmation Web 2013-2014

Durée de vie de l'objet myPDO Nature de l'objet membre statique d'une classe : variable globale Construction créé au premier appel de myPDO::getInstance() Destruction variable globale : durée de vie = le script détruit en fin de script Bilan connexion lors de la première requête déconnexion à la fin du script propre, transparent pour le développeur 16:56:28 Programmation Web 2013-2014

Implémentation 16:56:28 Programmation Web 2013-2014

Une implémentation <?php final class myPDO { private static $_PDOInstance = null ; private static $_DSN = null ; private static $_username = null ; private static $_password = null ; private static $_driverOptions = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ) ; 16:56:28 Programmation Web 2013-2014

Une implémentation public static function getInstance() { if (is_null(self::$_PDOInstance)) { if (self::hasConfiguration()) { self::$_PDOInstance = new PDO(self::$_DSN, self::$_username, self::$_password, self::$_driverOptions) ; } else { throw new Exception( __CLASS__ . ": Configuration not set") ; } return self::$_PDOInstance ; } 16:56:28 Programmation Web 2013-2014

Une implémentation private function __construct() { } private function __destruct() { if (!is_null(self::$_PDOInstance)) { self::$_PDOInstance = null ; } public function __clone() { throw new Exception("Clonage interdit") ; 16:56:28 Programmation Web 2013-2014

Gestion des paramètres de configuration 16:56:28 Programmation Web 2013-2014

Une implémentation public static function setConfiguration( $dsn, $username='', $password='', $driver_options=array()) { self::$_DSN = $dsn ; self::$_username = $username ; self::$_password = $password ; self::$_driverOptions = $driver_options + self::$_driverOptions ; } private static function hasConfiguration() { return self::$_DSN !== null ; 16:56:28 Programmation Web 2013-2014

Utilisation 16:56:28 Programmation Web 2013-2014

Simple, non ? Utilisation require_once "mypdo.class.php" ; myPDO::setConfiguration( 'mysql:host=mysql;dbname=my_db;charset=utf8', 'my_login', 'my_password') ; $pdo = myPDO::getInstance() ; $stmt = $pdo->prepare(<<<SQL SELECT id FROM a_table SQL ) ; $stmt->execute() ; while (($ligne = $stmt->fetch()) !== false) echo "<p>" . $ligne['id'] . "\n" ; // Déconnexion automatique en fin de script Simple, non ? 16:56:28 Programmation Web 2013-2014

Utilisation require_once "mypdo.class.php" ; myPDO::setConfiguration( 'mysql:host=mysql;dbname=my_db;charset=utf8', 'my_login', 'my_password') ; $pdo = myPDO::getInstance() ; $stmt = $pdo->prepare(<<<SQL SELECT id FROM a_table SQL ) ; $stmt->execute() ; while (($ligne = $stmt->fetch()) !== false) echo "<p>" . $ligne['id'] . "\n" ; // Déconnexion automatique en fin de script La configuration ne doit pas se trouver dans chaque fichier nécessitant un accès à la base de données 16:56:28 Programmation Web 2013-2014

Utilisation require_once "mypdo.class.php" ; myPDO::setConfiguration( 'mysql:host=mysql;dbname=my_db;charset=utf8', 'my_login', 'my_password') ; require_once "my_db.mypdo.class.php" ; $pdo = myPDO::getInstance() ; $stmt = $pdo->prepare(<<<SQL SELECT id FROM a_table SQL ) ; … Fichier de configuration my_db.mypdo.class.php 16:56:28 Programmation Web 2013-2014