Académique Documents
Professionnel Documents
Culture Documents
Cours PHP Pdo
Cours PHP Pdo
Achref El Mouelhi
elmouelhi.achref@gmail.com
28 juillet 2020
PHP
Plusieurs extensions possibles pour se connecter à une BD
mysql
mysqli
I c
PDO
ELH
U
L MO
f E
chre
c A
PHP
Plusieurs extensions possibles pour se connecter à une BD
mysql
mysqli
I c
PDO
ELH
U
L MO
f E
Quel choix ? !
A c hre
c
mysql
et mysqli sont utilisables seulement pour se connecter
à une base de données MySQL
PDO : une seule manière pour se connecter à n’importe quelle
base de données (Oracle, PostgreSQL, SQLITE...)
PHP
PHP
Avant de commencer, voici le script SQL qui permet de créer la base de
données utilisée dans ce cours
USE courspdo;
I c
E LH
CREATE TABLE personne(
num INT PRIMARY KEY AUTO_INCREMENT, OU
L M
nom VARCHAR(30),
prenom VARCHAR(30)
ref E
);
c h
c A
SHOW TABLES;
PHP
PHP
Trois étapes
I c
E L H
Établir la connexion avec la base de donn
O U ées
L M
r e f Eêtes SQL
Créer et préparer des requ
PHP
Syntaxe
<?php
maBase = new PDO (DSN, nomUtilisateur, motDePasse, [options]);
?>
I c
ELH
U
L MO
f E
chre
c A
PHP
Syntaxe
<?php
maBase = new PDO (DSN, nomUtilisateur, motDePasse, [options]);
?>
I c
ELH
U
DSN : Data Source Name
L MO
f E
hre
mysql:host=adresse;dbname=nomBD;port=numPort;charset=encodage
A c
c
host :
localhost
dbname : courspdo
charset : utf8
PHP
Exemple
$username = "root";
$password = ’’;
I c
utf8’;
ELH
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=
U
MO
$db = new PDO($dsn, $username, $password);
f E L
chre
c A
PHP
Exemple
$username = "root";
$password = ’’;
I c
utf8’;
ELH
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=
U
MO
$db = new PDO($dsn, $username, $password);
f E L
chre
c A
Une exception à capturer
le constructeur de PDO peut lancer une exception s’il ne peut se
connecter à la base
PHP
Exemple
try {
I c
$username = "root";
ELH
$password = ’’;
U
MO
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
L
charset=utf8’;
f E
hre
$db = new PDO($dsn, $username, $password);
c
c A
} catch (PDOException $e) {
}
echo ’Erreur : ’ . $e->getMessage();
PHP
try {
I c
$username = "root";
ELH
U
MO
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
charset=utf8’;
f E L
hre
$db = new PDO($dsn, $username, $password, array(PDO::
c
c A
ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
try {
$username = "root";
I c
$password = ’’;
ELH
U
MO
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
charset=utf8’;
f E L
$db = new PDO($dsn, $username, $password);
hre
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
c
c A
);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
I c
ELH
U
L MO
f E
chre
c A
PHP
I c
ELH
U
L MO
try {
f E
hre
$username = "root";
$password = ’’;
c
c A
$dsn = ’mysql:host=localhost;dbname=coursphdo;port=3308;charset=
utf8’;
$db = new PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$req = $db->query(’select * from personne’);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Afficher le résultat de la requête
I c
ELH
U
L MO
f E
c hre
c A
PHP
Afficher le résultat de la requête
I c
try {
ELH
U
MO
$username = "root";
$password = ’’;
E L
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
f
hre
’;
c
$db = new PDO($dsn, $username, $password);
c A
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$req = $db->query(’select * from personne’);
$res = $req->fetchAll();
foreach ($res as $key => $value) {
echo "$value[0] $value[1] $value[2] <br>";
}
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Exemple avec fetch
try {
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
I c
charset=utf8’;
ELH
U
MO
$db = new PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
);
f E L
hre
$req = $db->query(’select * from personne’);
c
c A
while ($tuple = $req->fetch()) {
echo $tuple[’num’] . " " . $tuple[’nom’] . " ". $tuple[
’prenom’]. "<br>";
}
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Fermer le curseur pour exécuter une autre requête
try {
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
I c
charset=utf8’;
ELH
$db = new PDO($dsn, $username, $password);
U
MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
L
);
f E
hre
$req = $db->query(’select * from personne’);
c
while ($tuple = $req->fetch()) {
c A
echo $tuple[’num’] . " " . $tuple[’nom’] . " ". $tuple[
’prenom’]. "<br>";
}
$req->closeCursor();
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
}
]. "<br>";
L MO
f E
hre
$req->closeCursor();
// pour fermer la connexion
c
c A
$db = null;
// ou ainsi
unset($db);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
}
]. "<br>";
L MO
f E
hre
$req->closeCursor();
// pour fermer la connexion
c
c A
$db = null;
// ou ainsi
unset($db);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Mode de récupération des données (paramètres de fetch())
PDO::FETCH BOTH (par défaut) : retourne chaque ligne dans un tableau indexé
par les noms des colonnes ainsi que leurs numéros, en commençant à 0.
I c
PDO::FETCH ASSOC : retourne chaque ligne dans un tableau indexé par les
ELH
noms des colonnes comme elles sont retournées dans le jeu de résultats
U
MO
correspondant.
E L
PDO::FETCH NUM : retourne chaque ligne dans un tableau indexé par le numéro
f
hre
des colonnes en commençant de 0.
c
c A
PDO::FETCH OBJ : retourne chaque ligne dans un objet avec les noms de
propriétés correspondant aux noms des colonnes comme elles sont retournées
dans le jeu de résultats.
PHP
Exemple avec PDO::FETCH NUM
try {
$username = "root";
$password = ’’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
$db = new PDO($dsn, $username, $password);
ELH
U
MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
f E L
$req = $db->query(’select * from personne’);
$tuple = $req->setFetchMode(PDO::FETCH_NUM);
hre
while ($tuple = $req->fetch()) {
c
c A
echo $tuple[0] . " " . $tuple[1] . " ". $tuple[2]. "<br>";
}
$tuple[’prenom’]. "<br>";
$req->closeCursor();
$db = null;
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
try {
$username = "root";
$password = ’’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
ELH
$db = new PDO($dsn, $username, $password);
U
L
$req = $db->query(’select * from personne’); MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
f E
hre
// $tuple = $req->setFetchMode(PDO::FETCH_NUM);
while ($tuple = $req->fetch(PDO::FETCH_NUM)) {
c
c A
echo $tuple[0] . " " . $tuple[1] . " ". $tuple[2]. "<br>";
}
$req->closeCursor();
$db = null;
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
try {
$username = "root";
$password = ’’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
ELH
$db = new PDO($dsn, $username, $password);
U
L
$req = $db->query(’select * from personne’); MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
f E
hre
while ($tuple = $req->fetch(PDO::FETCH_OBJ)) {
echo $tuple->num . " " . $tuple->nom . " " . $tuple->prenom . "
c
c A
<br>";
}
$req->closeCursor();
$db = null;
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Considérons la page formulaire.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Formulaire</title>
I c
</head>
ELH
<body>
U
MO
<form method=’post’ action=’test.php’>
<div>
f E L
nom : <input type=’text’ name=’nom’>
</div>
chre
c A
<div>
</div>
<div>
prenom : <input type=’text’ name=’prenom’>
PHP
Le corps de la page test.php
try
{
$username = "root";
$password = ’’;
I c
’;
ELH
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
PHP
Injection SQL : faille XSS (cross-site scripting)
I c
ELH
U
L MO
f E
chre
c A
PHP
Injection SQL : faille XSS (cross-site scripting)
I c
ELH
U
Exemple
L MO
f E
hre
Nom : un nom qui existe (Wick)
c
c A
Prénom : xxx ?’ or true !=’
PHP
Injection SQL : faille XSS (cross-site scripting)
I c
ELH
U
Exemple
L MO
f E
hre
Nom : un nom qui existe (Wick)
c
c A
Prénom : xxx ?’ or true !=’
Solution
PHP
try
{
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
$db = new PDO($dsn, $username, $password);
I c
ELH
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
U
$req = $db->prepare(’select * from Personne where nom = ? and
MO
prenom = ?’);
if ($req->fetch())
f E L
$req->execute(array($_POST[’nom’], $_POST[’prenom’]));
echo "Bonjour";
chre
c A
else
$db = null;
echo "Vous n’êtes pas inscrit";
try
{
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
$db = new PDO($dsn, $username, $password);
I c
EL
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
H
U
$req = $db->prepare(’select * from Personne where nom = ? and
MO
prenom = ?’);
if ($req->fetch())
f E L
$req->execute(array($_POST[’nom’], $_POST[’prenom’]));
echo "Bonjour";
chre
c A
else
$db = null;
echo "Vous n’êtes pas inscrit";
try {
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
$db = new PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
I c
ELH
$req = $db->prepare(’select * from Personne where nom = :nom and
prenom = :prenom’);
U
$req->execute(array(
’nom’ => $_POST[’nom’],
L MO
f E
hre
’prenom’ => $_POST[’prenom’]
));
c
c A
if ($req->fetch())
else
echo "Bonjour";
PHP
Une quatrième solution consiste à utiliser le marqueur nominatif : et la méthode
bindValue()
try {
$username = "root";
$password = ’’;
c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
I
’;
$db = new PDO($dsn, $username, $password);
ELH
U
MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$req = $db->prepare(’select * from Personne where nom = :nom and
prenom = :prenom’);
f E L
hre
$req->bindValue(’:nom’, $_POST[’nom’]);
c
$req->bindValue(’:prenom’, $_POST[’prenom’]);
c A
$req->execute();
if ($req->fetch())
echo "Bonjour";
else
echo "Vous n’êtes pas inscrit";
$db = null;
} catch (Exception $e) {
echo (’Erreur : ’ . $e->getMessage());
}
PHP
I c
Attention
ELH
U
bindValue() copie la valeur
L MO
f E
hre
bindParam() copie la référence
c
c A
Limite de bindValue()
$nom = ’wick’;
$prenom = ’john’
$req = $db->prepare(’select * from Personne where nom = :nom and prenom
= :prenom’);
$req->bindValue(’:nom’, $nom);
$req->bindValue(’:prenom’, $prenom);
$nom = ’travolta’;
I c
$req->execute();
// la requête sera exécutée avec les valeurs wick et john
ELH
U
L MO
f E
chre
c A
Limite de bindValue()
$nom = ’wick’;
$prenom = ’john’
$req = $db->prepare(’select * from Personne where nom = :nom and prenom
= :prenom’);
$req->bindValue(’:nom’, $nom);
$req->bindValue(’:prenom’, $prenom);
$nom = ’travolta’;
I c
$req->execute();
// la requête sera exécutée avec les valeurs wick et john
ELH
U
L MO
f E
hre
Exemple avec bindParam()
c
c A
$nom = ’wick’;
$prenom = ’john’
$req = $db->prepare(’select * from Personne where nom = :nom and prenom
= :prenom’);
$req->bindParam(’:nom’, $nom);
$req->bindParam(’:prenom’, $prenom);
$nom = ’travolta’;
$req->execute();
// la requête sera exécutée avec les valeurs travolta et john
PHP
Le type de la valeur PHP ne dicte pas le type SQL, mais c’est le troisième paramètre
(optionnel) de bindValue
try {
$username = "root";
$password = ’’;
c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
I
’;
$db = new PDO($dsn, $username, $password);
ELH
U
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
MO
$req = $db->prepare(’select * from Personne where nom = :nom and
L
prenom = :prenom’);
f E
hre
$req->bindValue(’:nom’, $_POST[’nom’], PDO::PARAM_STR);
c
$req->bindValue(’:prenom’, $_POST[’prenom’], PDO::PARAM_STR);
c A
$req->execute();
if ($req->fetch())
echo "Bonjour";
else
echo "Vous n’êtes pas inscrit";
$db = null;
} catch (Exception $e) {
echo (’Erreur : ’ . $e->getMessage());
}
PHP
I c
H
EL le type
U
Pour consulter la liste de constantes PDO spécifiant
L MO
https://www.php.net/manual/fr/pdo.constants.php
h r e fE
A c
c
PHP
Insérer des données
try {
$username = "root";
$password = ’’;
’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
$db = new PDO($dsn, $username, $password);
ELH
U
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$nom = $_POST[’nom’];
$prenom = $_POST[’prenom’];
L MO
f E
$res = $db->exec("INSERT INTO Personne (nom, prenom) VALUES(’$nom
’,’$prenom’)");
chre
c A
echo $res ? "tuple inséré" : "problème d’insertion";
$db = null;
} catch (Exception $e) {
echo (’Erreur : ’ . $e->getMessage());
}
PHP
Insérer des données
try {
$username = "root";
$password = ’’;
’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
$db = new PDO($dsn, $username, $password);
ELH
U
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$nom = $_POST[’nom’];
$prenom = $_POST[’prenom’];
L MO
f E
$res = $db->exec("INSERT INTO Personne (nom, prenom) VALUES(’$nom
’,’$prenom’)");
c hre
c A
echo $res ? "tuple inséré" : "problème d’insertion";
$db = null;
} catch (Exception $e) {
echo (’Erreur : ’ . $e->getMessage());
}
PHP
Insérer des données avec les requêtes préparées
try {
$username = "root";
$password = ’’;
c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
I
’;
$db = new PDO($dsn, $username, $password);
ELH
U
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$nom = $_POST[’nom’];
L MO
$prenom = $_POST[’prenom’];
f E
hre
$req = $db->prepare("INSERT INTO Personne (nom, prenom) VALUES(:nom
,:prenom)");
c
c A
$req->bindValue(":nom", $nom);
$req->bindValue(":prenom", $prenom);
$res = $req->execute();
echo $res ? "tuple inséré" : "problème d’insertion";
$db = null;
} catch (Exception $e) {
echo (’Erreur : ’ . $e->getMessage());
}
PHP
Pour récupérer l’identifiant de la personne ajoutée
try {
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
I c
$db = new PDO($dsn, $username, $password);
ELH
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
U
MO
$nom = $_POST[’nom’];
$prenom = $_POST[’prenom’];
E L
$req = $db->prepare("INSERT INTO Personne (nom, prenom) VALUES(:nom
f
hre
,:prenom)");
c
$req->bindValue(":nom", $nom);
c A
$req->bindValue(":prenom", $prenom);
$res = $req->execute();
$id = $db->lastInsertId();
echo $res ? "tuple inséré avec identifiant $id" : "problème d’
insertion";
$db = null;
} catch (Exception $e) {
echo (’Erreur : ’ . $e->getMessage());
}
PHP
I
c
E LH
U
MOet la modification
De même pour la suppression
L
h r e fE
A c
c
PHP
Une transaction
Un ensemble de requêtes SQL
I c
Exécutée en bloc (soit tout, soit rien)
ELH
U
L MO
h r e fE
A c
c
PHP
Une transaction
Un ensemble de requêtes SQL
I c
Exécutée en bloc (soit tout, soit rien)
ELH
U
L MO
h r e fE
A c bancaire
Exemple : un virement
c
Un retrait d’un premier compte
Un versement vers un deuxième
PHP
PHP
Transaction : syntaxe
try {
$username = "root";
$password = ’’;
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
’;
$db = new PDO($dsn, $username, $password);
c
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
I
$nom = $_POST[’nom’];
ELH
$prenom = $_POST[’prenom’];
U
,:prenom)");
L MO
$req = $db->prepare("INSERT INTO Personne (nom, prenom) VALUES(:nom
f E
hre
$req->bindValue(":nom", $nom);
$req->bindValue(":prenom", $prenom);
c
c A
$res = $req->execute();
$id = $db->lastInsertId();
$db->commit();
echo $res ? "tuple inseré avec identifiant $id" : "problème d’
insertion";
$db = null;
} catch (Exception $e) {
$db->rollback();
echo (’Erreur : ’ . $e->getMessage());
}
H & H: Research and Training 38 / 51
POO et PDO
PHP
Créons une classe Personne (entité) dans un répertoire models
class Personne
{
private $num;
private $nom;
private $prenom;
I c
ELH
U
public function __construct(int $num, string $nom, string $prenom)
MO
{
$this->setNum($num);
$this->nom = $nom;
f E L
hre
$this->prenom = $prenom;
c
c A
}
// + les getters + setters
PHP
Utilisation de la classe pour afficher les tuples
try {
$username = "root";
$password = ’’;
’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
$db = new PDO($dsn, $username, $password);
ELH
U
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$req = $db->query(’select * from Personne’);
L
while($res = $req->fetch(PDO::FETCH_NUM)){ MO
f E
$perso = new Personne($res[0], $res[1], $res[2]);
echo $perso;
chre
c A
}
$db = null;
unset($db);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Utilisation de la classe pour afficher les tuples
try {
$username = "root";
$password = ’’;
’;
I c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;charset=utf8
$db = new PDO($dsn, $username, $password);
ELH
U
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$req = $db->query(’select * from Personne’);
L
while($res = $req->fetch(PDO::FETCH_NUM)){ MO
f E
$perso = new Personne($res[0], $res[1], $res[2]);
echo $perso;
c hre
c A
}
$db = null;
unset($db);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Ajoutons la méthode hydrate($tuple) dans la classe Personne
PHP
Pour tester
try {
$username = "root";
$password = ’’;
c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
I
charset=utf8’;
$db = new PDO($dsn, $username, $password);
ELH
U
MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
);
f E L
$req = $db->query(’select * from Personne’);
hre
while($res = $req->fetch(PDO::FETCH_ASSOC)){
c
c A
$perso = new Personne($res);
}
echo $perso;
$db = null;
unset($db);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
I c
H
Deuxième solution avec un constructeur sans paramètre
EL
U
MO
public function __construct()
{
fE L
}
c h r e
c A
PHP
Pour tester, on utilise le mode PDO::FETCH CLASS
try {
$username = "root";
$password = ’’;
c
$dsn = ’mysql:host=localhost;dbname=courspdo;port=3308;
I
charset=utf8’;
$db = new PDO($dsn, $username, $password);
ELH
U
MO
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
);
f E L
$req = $db->query(’select * from Personne’);
hre
$personnes = $req->fetchAll(PDO::FETCH_CLASS, ’Personne’);
c
c A
foreach ($personnes as $personne) {
}
echo $personne->getNom() . "<br>";
$db = null;
unset($db);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
PHP
Organisation du code
La classe Connection
class Connection
{
private static $db = null;
private static $instance = null;
const DB_USER = ’root’;
const DB_PASSWORD = ’’;
const DB_HOST = ’localhost’;
I c
const DB_NAME = ’courspdo’;
const DBMS_PORT = 3308;
ELH
U
private function __construct()
L MO
{
f E
hre
try {
c
c A
$dsn = ’mysql:dbname=’ . self::DB_NAME . ’;host=’ . self::
DB_HOST . ’;port=’ . self::DBMS_PORT;
self::$db = new PDO($dsn, self::DB_USER, self::DB_PASSWORD);
self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::
ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo ’Erreur : ’ . $e->getMessage();
}
}
PHP
f E L
self::$instance = new Connection();
hre
}
c
c A
return self::$db;
}
}
PHP
La classe Personne
class Personne
{
private $num;
I c
private $nom;
ELH
U
MO
private $prenom;
f E L
hre
public function __construct()
c
c A
{
}
// + getters + setters + __toString
PHP
La classe PersonneManager définie dans un répertoire dao
class PersonneManager
{
private $db = null;
E L
public function save(Personne $personne): int
f
hre
{
c
$req = $this->db->prepare(’INSERT INTO personne (nom, prenom)
c A
VALUES (:nom, :prenom)’);
$req->bindValue(’:nom’, $personne->getNom(), PDO::PARAM_STR);
$req->bindValue(’:prenom’, $personne->getPrenom(), PDO::
PARAM_STR);
$req->execute();
return $this->db->lastInsertId();
}
// + les autres méthodes
}
PHP
PHP
Remarque
I c
N’oubliez pas d’implémenter les quatre autres méthodes de la classe
PersonneManager
ELH
U
findAll()
L MO
f E
findById()
chre
update() c A
remove()