PHP – MySQL N°2 IUT MMI TOULON 2016 - 2017 Base de données : Utilisation avec PHP Se connecter à la base de données PHP propose plusieurs moyens de se connecter à une base de données MySQL : - L'extension mysql_ : ce sont des fonctions qui permettent d'accéder à une base de données MySQL et donc de communiquer avec MySQL. - L'extension mysqli_ : ce sont des fonctions améliorées d'accès à MySQL. Elles proposent plus de fonctionnalités et sont plus à jour. L'extension PDO (PHP Data Objects) : C'est un outil complet qui permet d'accéder à n'importe quel type de base de données. On peut donc l'utiliser pour se connecter aussi bien à MySQL que PostgreSQL ou Oracle. Comparatif des 2 extensions Normalement, PDO est activé par défaut. Pour le vérifier, faites un clic gauche sur l'icône de WAMP dans la barre des tâches, puis allez dans le menu PHP / Extensions PHP et vérifiez que php_pdo_mysql est bien coché. L’utilisation de la BD avec PHP se fait en 5 étapes : - Connexion - Sélection de la BD - Requête - Exploitation des résultats - Fermeture de la connexion Structure des classes de PDO PDO propose 3 classes : - PDO lien à la BD - PDOStatement : requêtes et leurs résultats -PDOException : pour la gestion des erreurs Se connecter à MySQL avec PDO Nous allons avoir besoin de 4 renseignements : Le nom de l'hôte : c'est l'adresse de l'ordinateur où MySQL est installé. Si MySQL est installé sur le même ordinateur que PHP : localhost Se connecter à MySQL avec PDO La base : c'est le nom de la base de données à laquelle vous voulez vous connecter. Le login : il permet de vous identifier. Renseignez-vous auprès de votre hébergeur pour le connaître. Le mot de passe : Renseignez-vous auprès de votre hébergeur. Se connecter à MySQL avec PDO Se connecter à MySQL via PDO sur la base test : <?php $bdd = new PDO('mysql:host=localhost; dbname=test‘, 'root', ''); ?> Se connecter à MySQL avec PDO Lorsque votre site sera en ligne, vous aurez sûrement un nom d'hôte différent ainsi qu'un login et un mot de passe comme ceci : <?php $bdd = new PDO('mysql:host=sql.hebergeur.com; dbname=mabase', 'pierre.durand', 's3cr3t'); ?> Tester la présence d'erreurs <?php try { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } ?> Récupérer des données : Pour récupérer des informations de la base de données, nous avons besoin de notre objet qui représente la connexion à la base : $bdd. <?php $reponse = $bdd->query('Tapez votre requête SQL ici'); ?> On demande ainsi à effectuer une requête sur la base de données. "query" en anglais signifie "requête". Effectuons la requête : <?php $reponse = $bdd->query('SELECT * FROM jeux_video'); ?> $reponse contient maintenant la réponse de MySQL Le problème, c'est que $reponse contient quelque chose d'inexploitable. MySQL nous renvoie beaucoup d'informations et il faut les organiser. Pour récupérer une entrée, on prend la réponse de MySQL et on y exécute fetch(), ce qui nous renvoie la première ligne. $donnees = $reponse->fetch(); $donnees est un tableau (array) qui contient champ par champ les valeurs de la première entrée. Par exemple, si vous vous intéressez au champ console, vous utiliserez l'array : $donnees['console']. Il faudra faire une boucle pour parcourir chaque entrée une à une. A chaque fois que vous appellerez $reponse->fetch(), vous passez à l'entrée suivante. A la fin de la requette, il faut ajouter : $reponse->closeCursor(); Vous devez effectuer cet appel à closeCursor() à chaque fois que vous avez fini de traiter le retour d'une requête afin d'éviter d'avoir des problèmes à la requête suivante. Cela signifie qu'on a terminé le travail sur la requête. Exécuter une requête sans retour : Qu'est-ce que j'appelle une requête sans retour ? C'est une requête qui ne retourne pas de données. Par exemple, les requêtes qui suppriment, modifient ou insèrent des données. Les requêtes qui retournent des données sont celles qui commencent par "SELECT ...". Exécuter une requête sans retour : Pour ce type de requête, il faut utiliser la méthode exec(), qui retourne le nombre de ligne affectées. <?php // Connexion à la base de données require 'sqlconnect.php'; $sql = 'DELETE FROM accouns WHERE type = "member"'; $nb = $bdd->exec($sql); echo $nb.' membres ont été supprimés.'; ?> La variable $nb contient le nombre de lignes affectées (dans ce cas, supprimées) via notre requête.