Ceci est une ancienne révision du document !
BDD - MySQL et PHP
[Mise à jour le 28/8/2024]
Sources
- Documentation de référence sur php.net
- Tutoriel sur le site Openclassrooms : Concevez votre site web avec PHP et MySQL
Mots-clés : SGBD, base, table, enregistrement, champ, requêtes, SQL.
1. Introduction
En PHP, on se connecte à une base de données avec les méthodes suivantes:
- Avec l'extension mysqli_ (modèle procédural lié à MySQL)
- Avec l'extension PDO (modèle objet) : à privilégier, car plus moderne et permet l'accès à divers types de BDD (SQLite, MySQL, etc.) avec la même syntaxe.
PDO (PHP Data OBjects) comprend trois classes :
- PDO pour créer des objets de connexion à la base disposant de méthodes pour l'envoi de requêtes, etc.
- PDOStatement permettant de gérer des requêtes préparées et des résultats de requête.
- PDOException qui permet de gérer et d'afficher des informations sur les erreurs.
Extrait de la table jeux_video de la base test utilisée dans les exemples
jeux_video
On utilise le SGBD MySQL pour les exemples de la base test. La table jeux_video peut être téléchargé ici.2. Accès à une base de données MySQL avec PHP
L'exploitation d'une base de données se fait à travers les actions suivantes :
- Connexion à la base
- Envoi de requêtes au serveur
- Traitement du résultat des requêtes
- Fermeture de la connexion
2.1 Connexion à la base
- Syntaxe
nomConnect = new PDO('mysql:host=$host dbname=$base',user,pass);
- Exemple 1 : Connexion à la base test avec le login root, sans mot de passe et sans la gestion des erreurs
- *.php
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
- Exemple 2 : Même connexion avec la gestion des d'erreurs
2.2 Envoi d'une requête
Cas 1 - Si la requête ne retourne pas de résultat (INSERT, UPDATE, DELETE, etc.), on utilise la méthode exec().
- Syntaxe
integer nomConnect → exec(string requete)
nomvar = nomConnect → exec(string requete)
- Exemple : modification du possesseur de la console NES identifiée par ID=1 (Initialement Florent)
- Résultat
Cas 2 - Si la requête retourne un résultat (SELECT, etc.), on utilise la méthode query().
- Syntaxe
object nomConnect → query(string requete)
nomResultat = nomConnect → query(string requete)
- Exemple : reponse reçoit le résultat de la requête
- *.php
$reponse = $bdd->query('SELECT * FROM jeux_video WHERE console="NES"');
- Résultats issus du traitement décrit au paragraphe suivant
- Super Mario Bros - Laurent - 4
- The Rocketeer - Michel - 2
- Ice Hockey - Michel - 7
2.3 Traitement du résultat de la requête
- Insertion, suppression, mise à jour
- *.php
echo "<p> $nb ligne(s) modifiée(s) </p>"; // Résultat : 1 ligne(s) modifiée(s)
$nb contient le nombre de lignes modifiées dans l'exemple de cas 1 précédent. Cette valeur pourra être testée pour valider la requête.
- Résultat d'une commande SELECT
- Syntaxe
array nomResultat → fetch(integer type);
Cette méthode retourne un tableau :- pouvant être indicé si type = PDO::FETCH_NUM
- dont les clés sont les noms des colonnes de la table interrogée si type = PDO::FETCH_ASSOC
- dont les clés sont mixtes si type = PDO::FETCH_BOTH
Pour lire toutes les lignes du résultat, il faut créer une boucle while qui lit chaque ligne.
- Exemple
- *.php
while ($donnees = $reponse->fetch()) { echo '<p>' . $donnees['nom'].' - '.$donnees['possesseur'].' - '.$donnees['prix'].'</p>'; }
- Résultats
- Super Mario Bros - Laurent - 4
- The Rocketeer - Michel - 2
- Ice Hockey - Michel - 7
2.4 Fermeture de la connexion
- Exemple
- *.php
$bdd=null;
Résumé
- Pour dialoguer avec MySQL depuis PHP, on fait appel à l'extension PDO de PHP.
- Avant de dialoguer avec MySQL, il faut s'y connecter. On a besoin de l'adresse IP de la machine où se trouve MySQL, du nom de la base de données ainsi que d'un login et d'un mot de passe.
- Il faut faire une boucle en PHP pour récupérer ligne par ligne les données renvoyées par MySQL.