La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Information personnelle... Mon groupe de projet, lundi prochain : pour linstant, même salle (pc5, accès 17)

Présentations similaires


Présentation au sujet: "Information personnelle... Mon groupe de projet, lundi prochain : pour linstant, même salle (pc5, accès 17)"— Transcription de la présentation:

1 Information personnelle... Mon groupe de projet, lundi prochain : pour linstant, même salle (pc5, accès 17)

2 Web et bases de données David Gross-Amblard (CNAM-Vertigo/Cédric) Projet 3I

3 Plan zUne base de données, pourquoi zMysql zInterconnexion avec Php : exemples zConnexions multiples (odbc) Transparents et informations complémentaires sur :

4 Une base de données : pourquoi

5 Rôle dune base de données zManipulation de grandes quantités dinformation yreprésentation des données de lapplication yinterrogation des données (requêtes, langage) yoptimisation des requêtes zModelisation des données (méthode) zSecurité (pannes) yGestion de droits daccès zAccès multiples en simultané

6 Modèle relationnel zModèle le plus courant zdonnées = table Nom Prenom CB Gross David John Jimmy Onyme Anne zTypage des données zrequête : SQL (standard galactique)

7 MySQL : un sgbd à la mode

8 Qu'est-ce que MySQL ? zC'est un SGBD relationnel yGratuit (www.mysql.com), sous la GNU GPL yDisponible sous Windows et tous les Unix yPropose le minimum vital x(Presque) tout le langage SQL xStockage, indexation, optimisation yQualités reconnues (outre la gratuité): xSimplicité xEfficacité xRobustesse

9 Quelques limites de MySQL zPas de transactions ! yInadapté pour les applications transactionnelles (finances, réservations) yNi commit, ni rollback, une reprise sur panne rudimentaire zPas de requêtes imbriquées yPas très grave !? zPas d'environnement de développement yPas de générateur décran ou de rapport, pas d'outil pour le DBA, etc. Juste une API en C !

10 Statut de MySQL à l'heure actuelle zTrès prisé pour les sites web yTrès bonne intégration avec Apache et PHP yTout est gratuit ! zEn fort développement yIntégration des transactions ? zBeaucoup de « contributions » extérieures yAPI en C++, Perl, PHP, Java (JDBC) yDes clients graphiques, des utilitaires zEn résumé, un moteur SQL, simple et efficace

11 Architecture de MySQL Serveur mysqld var mysql Films phpMyAdmin mysqladmin mysql mysqlimport Connexion utilisateur

12 Le serveur mysqld zIl est en écoute sur un port réseau (le 3306 par défaut) zIl gère une ou plusieurs bases de données yLa base mysql est le «dictionnaire de données» yLes autres bases sont des bases utilisateur zIl dialogue avec ses clients en multi- threading (processus léger)

13 Les bases de données zUne base = un répertoire ! zUne table = 3 fichiers ! DATADIR (/mysql/var) mysql FILMSrigaux_p Film.MYD Film.MYI Film.frm Artiste.MYD Artiste.MYI Artiste.frm Données Index Structure

14 Le client mysql zPermet de se connecter sous un nom d'utilisateur: mysql -u root -p Films -> se connecte sous root (MySQL) à la base Films, avec un mot de passe zPermet d'entrer toutes les commandes (en fonction des droits d'accès bien sûr)

15 Les utilisateurs : puissant mais compliqué zUn utilisateur MySQL est défini par yson nom yle nom (Internet) de sa machine zProblèmes : y1: ne sont pas les mêmes utilisateurs ! y2 : si le serveur tourne sous cortes, il faut utiliser le synonyme localhost ! y3 : on peut utiliser des '%' : %.cnam.fr désigne toutes les machines du CNAM

16 Les droits zUn utilisateur peut avoir plusieurs types de droits: ysur le serveur (administration) ysur les bases et tables (création, destruction) ysur les données (lecture, écriture) ysur d'autres utilisateurs (transmission de droits) zLe compte root est le DBA: il a tous les droits sur tout

17 Création d'utilisateurs : la commande GRANT zPour créer un utilisateur avec tous les droits sur la base Films: GRANT ALL ON Film.* TO IDENTIFIED BY 'mdpAdmin' zPour créer un utilisateur avec des droits en lecture sur la table Artiste: GRANT select ON Film.Artiste TO IDENTIFIED BY 'mdpVisiteur'

18 Création de bases et de tables zOn crée des bases sous root : % mysql -u root -p mysql> CREATE DATABASE Films; zTout utilisateur ayant des droits peut créer des tables dans une base: % mysql -u adminFilms -p Films mysql> CREATE TABLE Film (...); zLes commandes SQL CREATE, ALTER, DROP sont reconnues

19 Types de données MySQL zMySQL reconnaît les principaux types SQL2, et quelques autres: yINTEGER : les entiers yFLOAT : numériques flottants yDECIMAL (M, D) : numériques exacts yCHAR : chaînes de longueur fixe yVARCHAR :chaînes de longueur variable yTEXT : textes longs yDATE : dates yTIME : moments

20 Exemple de création de table CREATE TABLE Film (id INT NOT NULL AUTO_INCREMENT titre VARCHAR (50) NOT NULL, annee INTEGER NOT NULL, idMES INTEGER, resume TEXT, codePays VARCHAR (4), PRIMARY KEY (titre), FOREIGN KEY (idMES) REFERENCES Artiste, FOREIGN KEY (codePays) REFERENCES Pays);

21 Insertion dans une table mysql> CREATE TABLE MaTable -> (MaDonnee INTEGER NOT NULL, -> PRIMARY KEY (MaDonnee)); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO MaTable (MaDonnee) VALUES (1); Query OK, 1 row affected (0.05 sec) zIl vaut mieux placer toutes les commandes dans un fichier de script, MonF.sql mysql -u MonNom -p MaBase < MonF.sql

22 Exemple d'un fichier de script # Création d'une table 'FilmSimple' USE Films; CREATE TABLE FilmSimple (titre VARCHAR (30), annee INTEGER, nomMES VARCHAR (30), prenomMES VARCHAR (30), anneeNaiss INTEGER ) ;

23 MySQL en résumé zTout à fait conforme à la norme SQL ANSI yCREATE TABLE, DROP TABLE, ALTER TABLE ySELECT, INSERT, DELETE, UPDATE zAvec des extensions (très utiles) yTypes de données (TEXT, BLOB) yContraintes (AUTO_INCREMENT) yBeaucoup de fonctions

24 Programmation MySQL/PHP

25 Rappel : langage Php zDu code inséré dans une page HTML zSitué entre balises zCode executé par le serveur zRésultat : une nouvelle page HTML

26 Rappel : langage Php Bienvenue ! Il est h à ma montre.

27 Architecture avec base de données Navigateur Serveur web + PHP machine serveur Requête CGI Document HTML Fichier HTML/PHP Résultat

28 CGI/Bases de données Application avec MySQL/PHP zPrincipe : création de documents web à partir d'une BD yMySQL se charge du stockage, de la protection des données, de l'interface SQL yPHP : xextrait des données et les met en forme xreçoit des données et les stocke yLe navigateur fournit l'interface graphique zArchitecture à trois pôles, à la sauce Web

29 Architecture avec base de données Navigateur Serveur web + PHP Serveur BD machine serveur Requête CGI Document HTML Fichier HTML/PHP SQL Base de données

30 Connexion à MySQL avec un script PHP zmysql_pconnect (serveur, nom, passe) yétablit une connexion ysi OK, renvoie un identifiant non nul cnx zmysql_select_db(base, cnx) yse place dans une base et renvoie vrai si OK zmysql_query (requete, cnx) yexécute une requête et renvoie un identifiant zmysql_fetch_object (resultat) yrenvoie la ligne suivante sous forme d'objet

31 Programmation MySQL/PHP : premier exemple Connexion à la base MaBase (base de films) Affichage du titre, année et metteur en scene du film

32 Exemple : interrogation et affichage (1)

33 Exemple : interrogation et affichage (2) $resultat = mysql_query ("SELECT * FROM FilmSimple", $connexion); if ($resultat) while ($film = mysql_fetch_object ($resultat)) echo "$film->titre, paru en $film->annee, réalisé ". "par $film->prenomMES $film->nomMES. \n"; else { echo " Erreur dans l'exécution de la requête. "; echo " Message : ".mysql_error($connexion); }

34 Programmation MySQL/PHP : exemple avec formulaire

35 En association avec un formulaire (démo)démo Formulaire pour programme PHP Titre : Année début : Année fin : Comment combiner ces critères. ET OU ?

36 On récupère donc les variables $titre, $anMin, $anMax, et $comb

37 Il reste à exécuter la requête titre, paru en $film->annee, réalisé ". "par $film->prenomMES $film->nomMES. \n"; ?>

38 Programmation MySQL/PHP : mise à jour dune base

39 Mises à jour de la base zOn utilise un formulaire de saisie, et on déclenche: yUn ordre INSERT pour des insertions yUn ordre UPDATE pour une modification yUn ordre DELETE pour une destruction zDans tous les cas la fonction mysql_query permet d'exécuter l'ordre.

40 Exemple: mise à jour de la table FilmSimple (démo)démo Titre : Anne : Nom : Prnom : Anne : Votre choix

41 L'action dépend du bouton choisi par l'utilisateur // Test du type de mise à jour effectuée echo " \n"; if (isset($inserer)) echo "Insertion du film $titre"; elseif (isset($modifier)) echo "Modification du film $titre"; elseif (isset($detruire)) echo "Destruction du film $titre"; echo " \n"; // Affichage des données du formulaire echo "Titre: $titre annee: $annee \n"; echo "Mis en scène par $prenom $nom, né en $anneeNaiss\n";

42 Choix de la requête en fonction de l'action demandée if (isset($inserer)) $requete = "INSERT INTO FilmSimple (titre, annee, ". "prenomMES, nomMES, anneeNaiss) ". "VALUES ('$titre', $annee, ". "'$nom', '$prenom', $anneeNaiss) "; if (isset($modifier)) $requete = "UPDATE FilmSimple SET annee=$annee, ". "prenomMES = '$prenom', nomMES='$nom', ". "anneeNaiss=$anneeNaiss WHERE titre = '$titre' "; if (isset($detruire)) $requete = "DELETE FROM FilmSimple WHERE titre='$titre'"; $resultat = mysql_query ($requete, $connexion);

43 Programmation MySQL/PHP : requêtes sur la structure de la base

44 Informations sur le schéma zEtant donné le résultat d'une requête : ymysql_num_fields($res) donne le nombre d'attributs ymysql_field_name($res, $i) donne le nom de l'attribut ymysql_fetch_row ($res) renvoie une ligne du résultat sous la forme d'un tableau indicé.

45 Information sur le schéma zApplication : SQL dynamique. z-> phpmyadmin zhttp://cortes.cnam.fr:8080/phpMyAdmin exemple

46 Programmation MySQL/PHP : gestion de sessions Comment associer à un utilisateur web une grande quantité dinformation

47 Problèmes zLe serveur ne distingue pas les connexions succesives : comment identifier un utilisateur ? zComment faire pour que les données relatives à un utilisateur soit disponibles pour tous les scripts du site web ?

48 Identification de l utilisateur zOn utilise les cookies yutilisateur saisit (login,password) yle navigateur enregistre les cookies (login,password) ychaque page du site teste l existence de ces cookies -> on connaît ainsi lutilisateur

49 Données associées à l utilisateur zOn ne peut pas mettre toutes les données dans les cookies (taille, sécurité) -> base de données zSolution : yIdentification de l utilisateur -> numero de session unique ycookies (login,passwd,numero session)

50 Données associées à l utilisateur Login session limite donnée1 donnée2 … dgram 552 5mn rateau 3 truc127 2mn pelle 1 … zChaque script retrouve les données associées grâce au numéro de session -> requête SQL zAjout/suppression d information

51 Connexions : - A plusieurs bases - A plusieurs SGBD Intégration de données Vitesse de connexion

52 Interroger plusieurs bases Mysql Navigateur Serveur web + PHP Serveur BD machine serveur Fichier HTML/PHP Serveur BD machines distantes

53 Plusieurs connexion php

54 Et si la base nest pas Mysql ? Navigateur Serveur web + PHP Serveur BD Mysql machine serveur Fichier HTML/PHP Serveur BD Oracle Serveur BD Postgres machines distantes

55 Interface commune zODBC (Open Database Connectivity) zFonctions php valable pour tout SGBD zodbc_connect(db,login,pass); zodbc_exec(requete,connexion); zodbc_fetch_row(connexion);

56 Descripteur (aperçu)

57 Conclusion zMysql : sgbd libre, puissant, répandu zInterconnexion avec Php : yproduction de documents HTML à partir de requêtes SQL ygestion des interactions avec l utilisateur (requêtes/données de formulaires) zOdbc


Télécharger ppt "Information personnelle... Mon groupe de projet, lundi prochain : pour linstant, même salle (pc5, accès 17)"

Présentations similaires


Annonces Google