Rappels sur MySQL Bases de données: vocabulaire Types d'attributs particuliers * Attribut en clé primaire * Identifiant unique d'un enregistrement * Accès direct à l'enregistrement par la clé * Accélère les jointures où la clé sert de pivot * Attribut en index * N'est pas forcément unique dans la table * Accélère les tris (ou recherches) sur l'attribut * Sans index: recherche séquentielle * Avec index: table organisée en zones Requêtes SQL (1/3) * SQL: Structured Query Language * Langage universel des bases de données * Permet l'interrogation d'une base * Permet la modification d'une base * Projection * Sélection de certains attributs d'une table * SELECT titre,auteur FROM ouvrage * Sélection * Sélection d'enregistrements d'une table * Vérifiant certaines conditions * SELECT * FROM ouvrage WHERE auteur='Harris, Thomas' Requêtes SQL (2/3) * Tri * SELECT * FROM utilisateur ORDER BY nom,prenom * Croissant par défaut * Décroissant: "DESC" après le nom de l'attribut * Pour accélérer le tri: index * Jointure * Fusion de plusieurs tables * SELECT utilisateur.nom, utilisateur.prenom, ouvrage.titre FROM emprunt,utilisateur,ouvrage WHERE (utilisateur.id=emprunt.utilisateur AND ouvrage.id=emprunt.ouvrage) * Pour identifier de manière unique: clé primaire Requêtes SQL (3/3) * Insertion d'un enregistrement * INSERT INTO ouvrage (titre,auteur) VALUES ('Sphère','Crichton, Michael') * Suppression d'enregistrement(s) * DELETE FROM utilisateur WHERE nom='Nawouak' * Suppression de tous les enregistrements avec le nom "Nawouak" * DELETE FROM emprunt WHERE id=2 * Suppression de l'enregistrement avec l'identifiant unique "2" * Modification d'enregistrement(s) * UPDATE emprunt SET utilisateur=7 WHERE ouvrage=2 Connexion à une base MySQL (1/3) * Connexion au serveur MySQL * Nom du serveur ("host") * Nom de l'utilisateur ("login") * Mot de passe ("password") * mysql_connect($host,$login,$password) * Sélection de la base * Nom de la base ("base") * mysql_select_db($base) * Déconnexion du serveur * mysql_close() * Toujours se déconnecter: pensez aux autres ! Connexion à une base MySQL (2/3) * Schéma de connexion if (@mysql_connect($host,$login,$password)) { if (@mysql_select_db($base)) { /* Connexion réussie */ /* Code du script */ @mysql_close(); } else { @mysql_close(); die("Connexion à la base impossible !"); } } else die("Connexion au serveur impossible !"); * "@" supprime l'affichage des messages d'erreur * "die" affiche un message et interrompt le script Connexion à une base MySQL (3/3) * Défauts du schéma * Réécrire le schéma à chaque connexion à la base * Informations de connexion dupliquées dans chaque page * Petit exercice * Ecrire une fonction pour la connexion * Mettre cette fonction dans un fichier (connexion.php) * Mettre les informations de connexion dans un fichier (globales.php) * Réécrire le schéma de connexion en conséquence Exécution d'une requête MySQL * Exécution d'une requête * $requete = "SELECT * from utilisateur"; $result = mysql_query($requete); * "$result" contient le résultat de la requête * Extraction des enregistrements un par un * $enr = mysql_fetch_row($result); * Enregistrement converti en tableau simple: $nom = $enr[2]; * $enr = mysql_fetch_array($result); * Enregistrement converti en tableau associatif: $nom = $enr["nom"]; * $enr = mysql_fetch_object($result); * Enregistrement converti en objet: $nom = $enr->nom; * Connaître le nombre d'enregistrements * Requête "SELECT" * Nombre d'éléments trouvés: mysql_num_rows($result) * Requête "DELETE" ou "UPDATE" * Nombre d'éléments affectés: mysql_affected_rows() * Petit exercice: afficher le contenu de la table "ouvrage" phpMyAdmin: interface d'administration * Interface Web d'administration MySQL * Niveau administrateur * Créer des utilisateurs * Login / mot de passe * Limitation de l'accès à certaines bases * Créer des bases * En général, un utilisateur = une base * Cas de la plupart des fournisseurs d'espace * Niveau utilisateur * Accès à une ou plusieurs bases * Souvent impossible de créer de nouvelles bases * Manipulation de tables * Définition de leur structure * Saisie des données * Requêtes |