COURS N°6 PHP et bases de données 2 Plan 1. Introduction à la programmation web 2. La structuration des pages web avec le langage HTML 3. Le style et le positionnement avec le langage CSS 4. La communication client serveur avec le protocole HTTP 5. Introduction au langage PHP 6. PHP et les bases de données 7. Introduction au langage JavaScript 8. Le JavaScript avancé 3 Plan du cours 1. Accès aux bases de données 2. PHP et MySQL 3. phpMyAdmin 4. Connexion au serveur MySQL 5. Déconnexion du serveur MySQL 6. Choix de la base de données 7. Envoi de requêtes SQL 8. Lecture du résultat d’une requêtes SQL 4 Accès aux bases de données •Une des raisons du succès de PHP •Support d’un grand nombre de bases • MySQL • Oracle • PostgreSQL • SQLite • Microsoft Access • DBM • IBM Informix • ... 5 Accès aux bases de données • Il existe des APIs différentes en fonction des bases de données • Principe similaire pour toutes les bases 1. Connexion au serveur (host + user + password) 2. Choix de la base 3. Exécution d’une requête 4. Traitement ligne par ligne du résultat 5. Fermeture de la connexion au serveur • Unification : PDO (PHP Data Objects) 6 PHP et MySQL • Depuis la version 5 de PHP, deux extensions pour accéder à la base de données MySQL • extension mysql • extension mysqli (dite “mysql améliorée”) • accès procédural • accès objet • Très proches en termes de fonctionnalités • Mêmes fonctions avec syntaxes identiques ou compatibles 7 PHP – MySQL et phpMyAdmin • phpMyAdmin : Un outil logiciel libre écrit en PHP, destiné à l'administration de MySQL à travers une interface WEB. 8 Connexion au serveur MySQL • Avec la fonction PHP : mysqli_connect(string $host, string $username, string $passwd, string $dbname) o $host est une chaîne contenant le nom du serveur o $username est le nom sous lequel l’utilisateur est autorisé à accéder au serveur o $passwd est le mot de passe associé à l’utilisateur o $dbname spécifie la base de données par défaut à utiliser lors de l’exécution de requêtes 9 Connexion au serveur MySQL • mysqli_connect() retourne un objet (de type mysqli) qui représente la connexion au serveur MySQL. Si la connexion n’est pas établie, elle retourne FALSE. • Il faut donc toujours tester la réussite de la connexion avant d’effectuer d’autres opérations. 10 Déconnexion du serveur MySQL • La connexion établie prend fin automatiquement quand le script PHP est terminé Bonnes pratiques Dès que possible : libérer le serveur MySQL • bool mysqli_close(myqli $conn) • $conn est l’identifiant de connexion retourné par la fonction mysqli_connect() • mysqli_close() retourne TRUE en cas de succès et FALSE si une erreur survient 11 Choix de la base de données • Possibilité de choisir la base de données par défaut lors de la connexion: Avec $dbname (4ème paramètre) dans la fonction mysqli_connect(); • Possibilité de choisir la base de données avec la fonction bool mysqli_select_db(mysqli $conn, string $dbname) • $conn est l’identifiant de connexion retourné par la fonction mysqli_connect() • $dbname contient le nom de la base de données • mysqli_select_db() retourne TRUE si la base $dbname existe et FALSE sinon 12 Envoi de requêtes SQL • mysqli_query(mysqli $conn, string $query) • $conn est l’identifiant de connexion retourné par la fonction mysqli_connect() • $query est une chaine de caractères contenant le code de la requête SQL • La fonction mysqli_query() retourne : • FALSE en cas d’echec. • Un objet de type mysqli_result Pour des requêtes de type SELECT, SHOW, DESCRIBE ou EXPLAIN réussies • TRUE pour les autres types de requêtes (UPDATE, DELETE, ...) ayant réussies. 13 Envoi de requêtes SQL • Il est recommandé d’effectuer un test pour vérifier la bonne réalisation de chaque requête SQL dans un script 14 Lecture du resultat d’une requêtes SQL • Le résultat de l’execution d’une requête SELECT peut être lu par la fonction mysqli_fetch_array() • mysqli_fetch_array(mysqli_result $result, int $typetab) • $result est l’identifiant du jeu de résultats retourné par la fonction mysqli_query() • mysqli_fetch_array() retourne une ligne de résultat sous la forme d’un tableau contenant autant d’éléments qu’il y a de colonnes précisées dans la requête SELECT 15 Lecture du resulatat d’une requêtes SQL • $typetab est une constante entière précisant si le tableau retourné doit être : • Associatif avec la valeur MYSQLI_ASSOC : Si le tableau est associatif, les clés du tableau sont les noms des colonnes de la table interrogée • Indicé avec la valeur MYSQLI_NUM : Si le tableau est indicé, l’indice d’un élément est celui de la colonne dans la requête, la première colonne ayant l’indice 0 • Les deux à la fois avec la valeur MYSQLI_BOTH : qui est la valeur par défaut 16 Lecture du résultat d’une requêtes SQL • Chaque nouvel appel de mysqli_fetch_array() retourne la ligne suivante du résultat identifié par $result, ou FALSE s’il n’y a plus de ligne à lire. • Exemples des différentes lectures : $query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3"; $result = mysqli_query($link, $query); /* Tableau numérique */ $row = mysqli_fetch_array($result, MYSQLI_NUM); printf ("%s (%s)\n", $row[0], $row[1]); /* Tableau associatif */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]); /* Tableau associatif et numérique */ $row = mysqli_fetch_array($result, MYSQLI_BOTH); printf ("%s (%s)\n", $row[0], $row["CountryCode"]); 17 Lecture du résultat d’une requêtes SQL • parcours du résultat en utilisant des boucles 18 Lecture du résultat d’une requêtes SQL • Les deux autres fonctions suivantes permettent de récupérer une ligne de résultat à la fois dans un tableau • mysqli_fetch_assoc(mysqli_result $result) se comporte comme mysqli_fetch_array($result, MYSQLI_ASSOC) • mysqli_fetch_row(mysqli_result $result) se comporte comme mysqli_fetch_array($result, MYSQLI_NUM)