BDD - MySQL et PHP
[Mise à jour le 28/8/2024]
Sources
Documentation de référence sur
php.net
-
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
Connexion
La connexion à la base se fait une seule fois en créant un objet de la classe PDO.
Objet PDO
L'objet $<nomConnect> représente la connexion au serveur. Il est utilisé pour toutes les opérations à effectuer sur la base.
- *.php
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
- *.php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage()); // En cas d'erreur, on affiche un message et on arrête tout
}
2.2 Envoi d'une requête
Variable
L'information liée au bon fonctionnement de la requête ou son résultat sont placés dans une variable pour être traités.
Cas 1 - Si la requête ne retourne pas de résultat (INSERT, UPDATE, DELETE, etc.), on utilise la méthode exec().
Requête
exec() retourne un entier contenant le nombre de lignes concernées par la requête.
- *.php
$nb=$bdd->exec('UPDATE jeux_video SET possesseur="Laurent" WHERE ID="1"');
Cas 2 - Si la requête retourne un résultat (SELECT, etc.), on utilise la méthode query().
Erreur
Retourne FALSE en cas d'erreur ou un objet représentant l'ensemble des lignes de résultat.
- *.php
$reponse = $bdd->query('SELECT * FROM jeux_video WHERE console="NES"');
2.3 Traitement du résultat de la requête
Vérification
Pour les opérations d'insertion, de suppression ou de mise à jour des données dans une base, il est utile de vérifier si la requête a bien été exécutée.
- *.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.
Pour les opérations d'insertion, de suppression ou de mise à jour des données dans une base, il est utile de vérifier si la requête a bien été exécutée.
SELECT
Lorsqu'il s'agit de lire le résultat d'une requête contenant la commande SELECT, la méthode query() retourne un objet de type PDOStatement ($reponse dans les exemples). La classe PDOStatement dispose de méthodes permettant de récupérer des données. La méthode des objets PDOStatement couramment utilisée pour lire des données est fetch().
Pour lire toutes les lignes du résultat, il faut créer une boucle while qui lit chaque ligne.
- *.php
while ($donnees = $reponse->fetch()) {
echo '<p>' . $donnees['nom'].' - '.$donnees['possesseur'].' - '.$donnees['prix'].'</p>';
}
2.4 Fermeture de la connexion
NULL
Pour clore la connexion, il suffit de détruire l'objet en assignant NULL à la variable qui le gère. Si ce n'est pas fait explicitement, PHP fermera automatiquement la connexion lorsque le script arrivera à la fin.
- *.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.