PHP
Chapitre 4 : Connexion base de données MySQL
La classe PDO
AU: 2024/2025
Objectifs
• Comprendre le principe de base pour se connecter à une base de données
• Savoir intérroger une base de données mySQL
• Découvrir la classe PDO ainsi que son principe de base pour se connecter à
une base de données
Prérequis
• Langage HTML et syntaxe de base PHP
• PHP orienté objet
2
Échanges de données
3
Echanges de données
Serveur
Web
1 Requête HTTP
2 Script PHP
Exploitation résultats BD
6
Réponse HTTP Connexion BD
7 3
Requête BD
8 Fin de script 4
Résultats BD
5
Affichage résultat BD
9
Serveur BD
Mon PC
4
LA CLASSE DE PDO
5
PDO
▪ PDO : PHP Data Objects
▪ Extension PHP fournissant une interface pour accéder à une base de données
▪ Interface orientée objet
6
Classes prédéfinies
▪ PDO : connexion PHP / base de données
◼ __construct()
◼ exec(), prepare(), query()
◼ errorCode(), errorInfo()
◼ getAttributes(), setAttribute()
◼ lastInsertId()
7
Classes prédéfinies
▪ PDOStatement : requête préparée, jeu de résultats
◼ bindColumn(), bindParam(), bindValue(),
◼ errorCode(), errorInfo()
◼ fetch(), fetchAll(), fetchColumn(), fetchObject(), setFetchMode()
◼ rowCount(), columnCount()
◼ getAttribute(), setAttribute()
◼ execute()
8
COMMENT SE CONNECTER ?
9
Connexions et gestionnaire de connexion
▪ Instanciation d'un objet PDO
▪ $dbh=new PDO(DSN , user , pass);
▪ DSN : Data Source Name
▪ nom_du_driver:syntaxe_spécifique_au_driver
▪ Ex : 'mysql:host=localhost;dbname=ma_base‘
▪ user : nom d'utilisateur,
▪ pass : mot de passe
▪ Fin de connexion : $dbh=null; /* ou */ unset($dbh);
10
GESTION DES ERREURS
11
Gestion des erreurs de connexion
▪ Connexion par construction d'un objet
▪ Gestion envisageable des erreurs
◼ Aucune
◼ Fin brutale (exit, die)
◼ Exception
▪ En cas d'erreur de connexion
◼ Objet PDOException lancé
◼ PDOException hérite de Exception
12
Gestion des erreurs de connexion
<?php
try {
$pdo = new PDO('mysql:host=dbs;dbname=music',
$user, $pass) ;
…
$pdo = null ;
}
catch (PDOException $e) {
echo "<p>Erreur: ".$e->getMessage() ;
die() ;
}
13
EFFECTUER UNE REQUÊTE SELECT
14
Exécution d’une requête
▪ PDO::query ( string statement ): PDOStatement
Requête
Résultat de requête
<?php
try {
$pdo = new PDO("mysql:host=dbs;dbname=music") ;
$pdostat = $pdo->query("SELECT * FROM artist") ;
}
catch (Exception $e) {
echo "<p>ERREUR : ".$e->getMessage() ;
}
15
Exploitation des résultats
▪ Récupération des données ligne à ligne
▪ Une ligne peut être :
◼ un tableau indexé
◼ un tableau associatif
◼ un objet anonyme
◼ un objet d'une classe définie par l'utilisateur
▪ Récupération des données d'une colonne
16
Parcours du résultats d’une requête
▪ Parcourir le résultat de la requête
Résultat de requête
SELECT *
FROM morceau
ORDER BY mor_id +--------+------------------------------------+
| mor_id | mor_nom |
+--------+------------------------------------+
| 872 | With A Little Help From My Friends |
| 873 | The Letter |
| 874 | Marjorine |
| 875 | Midnight Rider |
| 876 | You Are So Beautiful |
Curseur interne | 877 | Feelin' Allright |
| 878 | Cry Me A River |
...
17
Mode de récupération des données
$pdostat = $pdo->query( "SELECT id, name FROM artist");
$r = $pdostat->fetch(fetch_mode));
fetch_mode
PDO::FETCH_NUM PDO::FETCH_ASSOC
PDO::FETCH_OBJ
PDO::FETCH_CLASS,
ma_classe
// array // ma_classe // object // array
$r[0] $r->id $r->id $r['id']
$r[1] $r->name $r->name $r['name']
18
Mode de récupération des données
Exemple avec PDO::FETCH_NUM
<?php
try{
$pdo=new PDO("mysql:host=localhost;dbname=music" , "root","");
echo "connection établie avec succès <br>"; catch(PDOException $e)
$pdostat = $pdo->query("SELECT * FROM artiste") ; {
while($r = $pdostat->fetch(PDO::FETCH_NUM)) echo "<p>Erreur: ".$e->getMessage() ;
{ die() ;
foreach($r as $v) }
echo $v .' '; ?>
echo '<br>';
}
}
19
Mode de récupération des données
Exemple avec PDO::FETCH_ASSOC
<?php
try{
$pdo=new PDO("mysql:host=localhost;dbname=music" , "root","");
echo "connection établie avec succès <br>"; catch(PDOException $e)
$pdostat = $pdo->query("SELECT * FROM artiste") ; {
$pdostat->setFetchMode(PDO::FETCH_ASSOC); echo "<p>Erreur: ".$e->getMessage() ;
foreach ($pdostat as $ligne) { die() ;
echo "<p>" . $ligne['id'].' '.$ligne['nom'].' '.$ligne['prenom'].' '.$li }
gne['pays'].' '.$ligne['style'].' '."<br>"; ?>
}
}
20
Mode de récupération des données
Exemple avec PDO::FETCH_CLASS
<?php
class Artiste{
public $id;
public $nom;
public $prenom; catch(PDOException $e)
public $pays; {
public $style; echo "<p>Erreur: ".$e->getMessage() ;
} die() ;
try {$pdo = new PDO("mysql:host=localhost;dbname=music","root }
","") ; ?>
$sth = $pdo->prepare("select*from artiste");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_CLASS, "Artiste");
var_dump($result);
}
21
Mode de récupération des données
Exemple avec PDO::FETCH_OBJ
<?php
try{
$pdo=new PDO("mysql:host=localhost;dbname=music","root","" catch(PDOException $e)
); {
echo 'Connexion etablie avec succes <br>'; echo "<p>Erreur: ".$e->getMessage() ;
$sth=$pdo->prepare("SELECT *FROM artiste"); die() ;
$sth->execute(); }
$result=$sth->fetchAll(PDO::FETCH_OBJ); ?>
var_dump($result);
}
22
EFFECTUER DES REQUÊTES
INSERT/SELECT
23
Requête INSERT
24
Requête INSERT
25
Requête DELETE
26
REQUÊTES PRÉPARÉES
27
Préparation d’une requête
▪ Déroulement d'une requête SQL
1. Analyse
2. Compilation
3. Optimisation
4. Exécution
▪ Exécution répétée d'une requête : 1+2+3+4
▪ Préparation d'une requête : 1+2+3
▪ Exécution répétée d'une requête préparée : 4
28
Préparation d’une requête
▪ PDO::prepare(string statement): PDOStatement
◼ statement : la requête à préparer.
Peut contenir des paramètres anonymes (?) ou nommés (:nom)
◼ retourne un objet PDOStatement qui effectuera l'association des paramètres et
exécutera la requête
$pdo = new PDO("mysql:host=localhost;dbname=mysql");
$pdostat = $pdo->prepare("SELECT id, name
FROM artist
WHERE id = ?");
29
Association des paramètres d’une requête
▪ PDOStatement::bindValue(mixed parameter, mixed value ): bool
◼ parameter : le paramètre (nom ou position [1…n])
◼ value : sa valeur
▪ PDOStatement::execute([array parameters]): bool
◼ parameters : tableau associatif ou indexé des valeurs
30
Préparation puis exécution d’une requête
$pdo = new PDO("mysql:host=dbs;dbname=app") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->prepare("SELECT * FROM user
WHERE login = ?") ;
$pdostat->bindValue(1, 'root') ;
$pdostat->execute() ;
// Utilisation du résultat paramètre anonyme
$pdostat->bindValue(1, 'cutrona') ;
$pdostat->execute() ;
// Utilisation du résultat
Association
Préparation
Association d'une valeur
Exécution
d'une valeur
de 1er paramètre
delalarequête
au
requête
au 1er paramètre
31
Préparation puis exécution d’une requête
$pdo = new PDO("mysql:host=dbs;dbname=app") ;
$pdostat = $pdo->prepare("SELECT * FROM user
WHERE login = :utilisateur") ;
$pdostat->bindValue(':utilisateur', 'root') ;
$pdostat->execute() ;
// Utilisation du résultat paramètre
$pdostat->bindValue(':utilisateur', 'cutrona') ; nommé
$pdostat->execute() ;
// Utilisation du résultat
Association
Préparation
Exécution
d'une valeur
de
dela
au
larequête
requête
paramètre nommé
32
Merci de votre attention