Dveloppement dapplications web 7 Le SGBD My SQL
Développement d’applications web 7. Le SGBD My. SQL Aissa Boulmerka and Nardjes Bouchemal
My. SQL • Système de gestion de base de données relationnelles, My. SQL est un SGBDR très populaire, performant et fiable. • My. SQL est développé par My. SQL AB (http: //www. mysql. com) sous une license GPL (GNU General Public License). • My. SQL s’intègre facilement avec PHP (et Apache et Linux). • Utilise le langage SQL pour les requêtes (conforme à la majorité des standards SQL). 2
Modèle client/serveur • Une application SGBD roule sur le serveur. • Le serveur est accessible par un client qui peut être sur la même machine ou distant. • Un pilote ODBC est disponible. • Dans le cas du web, le client est le module PHP. 3
PHP et My. SQL • PHP offre une panoplie de fonctions pour exploiter les BD dont My. SQL. – Connexion – Requête – Administration – Etc … • Cependant, PHP doit être compilé avec les bons paramètres. 4
PHP, séquence de requête 1. 2. 3. 4. 5. Définition de la connexion Connexion Exécution de la requête Extraction des résultats de la requête Fin de la connexion, implicite ou spécifiée 5
Instructions PHP pour My. SQL • Définition de la connexion – int mysql_connect ([string hostname [: port] [: /path/to/socket] [, string username [, string password]]]) • Sélection de la base de données – int mysql_select_db (string database_name [, int link_identifier]) • Exécution de la requête – int mysql_query (string query [, int link_identifier]) • Extraction des résultats – array mysql_fetch_row (int result) • Fin de la connexion – int mysql_close ([int link_identifier]) 6
My. SQL • Utilisable dans la console : – mysql-u <identifiant> [base_de_donnée] < requete. sql • Utilisable avec PHPMy. Admin • Interfaçable avec PHP (par exemple)
Premier Exemple • Sous My. Sql: Select upper(nom), prenom, login FROM eleve WHERE choix=‘C’ORDER BY nom; • Sous PHP $sqlquery= « select upper(nom), prenom FROM eleve WHERE choix=‘C’ ORDER BY nom » ; $queryresult=mysql_query($sqlquery) or die ( « <p> vous n’avez pas réussit!</p> » );
PHPMy. Admin • Avec PHPMy. Admin, on peut : – Créer une base – Créer des tables – Modifier des tables – Remplir des tables – Supprimer des tables – Faire des requêtes SQL • Il est également possible d’exporter la structure et le contenu de la base vers
Établissement d’une connexion // Etablissement de la connexion // et choix de la base $host = 'localhost'; $name = 'test'; $username = 'root'; $password = '123456'; try{ $db = new PDO("mysql: host=$host; dbname=$name; charset=utf 8", $username, $password); . . . } catch (PDOException$ex) { echo "Problème connexion My. SQL ! ". $ex. get. Message(); }
Requête simple // Requête SELECT foreach($db->query('SELECT * FROM etudiant') as $row) { echo $row['nom']. ' '. $row['prenom']; // etc. . . } ou ou PDO: : FETCH_ASS // Requête SELECT OC: retourne un $stmt= $db->query('SELECT * FROM etudiant'); tableau indexé while($row = $stmt->fetch(PDO: : FETCH_ASSOC)) { par le nom de la echo $row['nom']. ' '. $row['prenom']; // etc. . . colonne comme } retourné dans le PDOStatement: : f jeu de résultats etch. All — // Requête SELECT Retourne un $stmt= $db->query('SELECT * FROM etudiant'); tableau $results = $stmt->fetch. All(PDO: : FETCH_ASSOC); contenant toutes // parcours des résultats les lignes du jeu // (tableau associatif) d'enregistrement echo $results[0]['nom']. ' '. $results[0]['prenom']; // etc. . . s
INSERT, UPDATE, DELETE // Requête modification $affected_rows= $db->exec("UPDATE etudiant SET nom='Imad' where id=1"); echo $affected_rows. ' lignes ont été modifiés'; // Requête insertion $affected_rows= $db->exec("INSERT INTO etudiant(id, nom, prenom) VALUES('3', 'Adam', 'Lina')"); echo $affected_rows. ' lignes ont été rajoutées'; // Requête suppression $affected_rows= $db->exec("DELETE FROM etudiant WHERE nom='Imad'"); echo $affected_rows. ' lignes ont été modifiés';
Accessoires // Récupérer le nombre de résultats $stmt= $db->query('SELECT * FROM etudiant'); $row_count = $stmt->row. Count(); // Récupérer le dernier identifiant // (utile quand incrémentation automatique) $result = $db->exec("INSERT. . . "); $insert. Id= $db->last. Insert. Id();
Pré-compilation (1/3) // Compilation sur le serveur $stmt= $db->prepare("SELECT * FROM etudiant WHERE id=? AND nom=? "); // Exécution avec les paramètres $stmt->execute(array($id, $nom)); $rows = $stmt->fetch. All(PDO: : FETCH_ASSOC); ou // Compilation sur le serveur $stmt= $db->prepare("SELECT * FROM etudiant WHERE id=? AND nom=? "); // Exécution avec les paramètres $stmt->bind. Value(1, $id, PDO: : PARAM_INT); $stmt->bind. Value(2, $nom, PDO: : PARAM_STR); $stmt->execute(); $rows= $stmt->fetch. All(PDO: : FETCH_ASSOC);
Pré-compilation (2/3) // Compilation sur le serveur $stmt= $db->prepare("SELECT * FROM etudiant WHERE id=: id AND nom=: nom"); // Exécution avec les paramètres $stmt->execute(array(': nom'=>$nom, ': id'=>$id)); $rows = $stmt->fetch. All(PDO: : FETCH_ASSOC); ou // Compilation sur le serveur $stmt= $db->prepare("SELECT * FROM etudiant WHERE id=: id AND nom=: nom"); // Exécution avec les paramètres $stmt->bind. Value(': id', $id, PDO: : PARAM_INT); $stmt->bind. Value(': nom', $nom, PDO: : PARAM_STR); $stmt->execute(); $rows= $stmt->fetch. All(PDO: : FETCH_ASSOC);
Pré-compilation (3/3) $values = array('Lina', 'Salim', 'Khaled', 'Sarah'); $nom = ''; // Compilation sur le serveur $stmt= $db->prepare("INSERT INTO etudiant(nom) VALUES (: nom)"); $stmt->bind. Param(': nom', $nom, PDO: : PARAM_STR); // Exécution avec les paramètres foreach($values as $nom) { $stmt->execute(); echo $nom; echo "</br>"; }
Transactions try { // Début de transaction $db->begin. Transaction(); // Requêtes $db->exec($query 1); $db->exec($query 2); $db->exec($query 3); // Validation $db->commit(); } catch(PDOException$ex) { // Un problème: on annule la transaction $db->roll. Back(); echo $ex->get. Message(); } // Un nouveau "begin. Transaction()" annule également le précédent
Fonctions utiles (rappel) explode($sep, $chaine) divise $chaine selon le séparateur $sep et renvoie les valeurs dans un tableau implode($sep, $tableau) regroupe les valeurs de $tableau avec le séparateur $sep et renvoie la chaîne de caractères htmlspecialchars($ch) retourne la chaîne $ch dans laquelle les caractères réservés au HTML ('<', '>', '&'. . . ) ont été remplacés par leur code HTML. mysql_espace_string($ch) retourne la chaîne $ch en y ajoutant des caractères d’échappement stripslashes retourne la chaîne $ch en supprimant les caractères d’échappement
- Slides: 18