Session BRE04 Help

Cours : PDO : la base de données côté PHP

Qu'est-ce que PDO ?

PDO c'est une librairie, intégrée à PHP qui permet d'interagir avec la base de données.

Se connecter à la base de données

Pour pouvoir manipuler une base de données, vous allez devoir vous y connecter :

$host = "db.3wa.io"; $port = "3306"; $dbname = "prenomnom_phpj6"; $connexionString = "mysql:host=$host;port=$port;dbname=$dbname;charset=utf8"; $user = "votre_username"; $password = "votre_password"; $db = new PDO( $connexionString, $user, $password );

Pour rappel, vous trouverez vos identifiants de base de données sur la page d'accueil du PHPMyAdmin fourni par la 3WA :

phpmyadmin identifiants

Lire dans la base de données avec SELECT

analyse d'un code d'exemple

$query = $db->prepare('SELECT * FROM users WHERE id = :id'); $parameters = [ 'id' => $_GET['id'] ]; $query->execute($parameters);
$query = $db->prepare('SELECT * FROM users WHERE id = :id');

Je prépare ma requête et lui indique si elle va devoir attendre des paramètres (avec :nom_du_parametre).

$parameters = [ 'id' => $_GET['id'] ];

Je prépare les paramètres de ma requête s'il y en a.

$query->execute($parameters);

J'exécute ma requête en lui passant les paramètres.

fetch

Si vous n'avez qu'une seule entrée à récupérer, utilisez fetch.

id

first_name

last_name

1

Steve

Rogers

2

Clark

Kent

$query = $db->prepare('SELECT * FROM users WHERE id = :id'); $parameters = [ 'id' => $_GET['id'] ]; $query->execute($parameters); $user = $query->fetch(PDO::FETCH_ASSOC);

Si $_GET['id'] vaut 2, le résultat sera :

[ 'id' => 2, 'first_name' => 'Clark', 'last_name' => 'Kent' ];

fetchAll

Si vous en avez plusieurs, utilisez fetchAll.

id

first_name

last_name

1

Steve

Rogers

2

Clark

Kent

$query = $db->prepare('SELECT * FROM users'); $query->execute(); $users = $query->fetchAll(PDO::FETCH_ASSOC);

Le résultat serait :

[ [ 'id' => 1, 'first_name' => 'Steve', 'last_name' => 'Rogers' ], [ 'id' => 2, 'first_name' => 'Clark', 'last_name' => 'Kent' ] ];

Se protéger des injections

N'utilisez jamais directement quelque chose transmis par un utilisateur. Jamais. C'est une énorme faille de sécurité, probablement l'une des pires.

⛔️ Vraiment ne faites jamais ça. ⛔️

'SELECT * FROM users WHERE id = ' . $_GET['id']

⛔️ "Never ever ever !" (Taylor Swift) ⛔️

On utilise donc les paramètres et la préparation de requête. En faisant ça, PDO va se charger de nettoyer les données de ce qui pourrait y être nuisible.

Vous avez un exemple dans la démonstration de fetch, mais je le remets au cas où c'est important :

if (isset($_GET['id'])) { // je mets un placeholder dans la requête avec : $query = $db->prepare('SELECT * FROM users WHERE id = :id'); // je prépare ma requête avec les paramètres $parameters = [ 'id' => $_GET['id'] ]; // PDO va cleaner les paramètres puis exécuter la requête $query->execute($parameters); $user = $query->fetch(PDO::FETCH_ASSOC); }

Écrire dans la base de données avec INSERT

Le principe sera le même pour utiliser INSERT, mais dans ce cas-là, pas besoin de fetch, simplement de récupérer l'id de notre nouvelle entrée dans la base :

$query = $db->prepare("INSERT INTO user (id, first_name, last_name) VALUES (NULL, :firstname, :lastname)"); $parameters = [ 'firstname' => $_POST['firstname'], 'lastname' => $_POST['lastname'] ]; $query->execute($parameters); $id = $db->lastInsertId();

Modifier dans la base de données avec UPDATE

$query = $db->prepare("UPDATE user SET firstname = :firstname, lastname = :lastname WHERE id = :id"); $parameters = [ 'id' => $_POST['id'], 'firstname' => $_POST['firstname'], 'lastname' => $_POST['lastname'] ]; $query->execute($parameters);

Supprimer dans la base de données avec DELETE

$query = $db->prepare("DELETE FROM user WHERE id = :id"); $parameters = [ 'id' => $_POST['id'] ]; $query->execute($parameters);

Exercice : Pratique PDO

11 June 2025