Version
query
, sans requête préparée.
Étant donné la base de données suivante :
DATABASE: wf3movies
movies
----
id INT PK AI
title VARCHAR(200)
director VARCHAR(200)
category VARCHAR(70)
release_date DATETIME
Dans un fichier movies.php
, on ajoute en haut du fichier la connexion à la base de données :
Attention ! Pensez à modifier dans
new PDO
les paramètres en fonction de votre configuration de MySQL.
login
etpassword
: généralement, le login estroot
et le mot de passe est soit vide''
soitroot
host
: généralementlocalhost
dbname
: le nom de la base de données (iciwf3movies
)port
: généralement 3306 sur Windows, 8889 avec MAMP sous Mac
$bdd = new PDO('mysql:host=localhost;dbname=wf3movies;charset=utf8;port=3306', 'login', 'password');
$request = "SELECT * FROM movies";
$response = $bdd->query($request);
$movies = $response->fetchAll(PDO::FETCH_ASSOC);
Déchiffrons ce code :
// On créée une connexion à la base de données que l'on stocke dans $bdd
$bdd = new PDO('mysql:host=localhost;dbname=wf3movies;charset=utf8;port=3306', 'login', 'password');
// On écrit notre requête MySQL. On peut aussi concaténer des variables PHP dedans si besoin !
$request = "SELECT * FROM movies";
// On demande à notre base de données, $bdd, d'exécuter la requête. On stocke la réponse de MySQL dans $response
$response = $bdd->query($request);
// On demande à la réponse de nous retourner TOUTES les données (grâce à fetchAll).
// De plus, ces données doivent être retournées sous forme de tableau associatif, grâce au paramètre PDO::FETCH_ASSOC.
$movies = $response->fetchAll(PDO::FETCH_ASSOC);
Si on var_dump
la variable $movies
... On tombe bien sur un array ! C'est une en fait une liste d'arrays associatifs, chacun correspondant à une entrée dans la base de données. On n'a plus qu'à scanner les données dans un foreach :
<?php foreach ($movies as $movie) : ?>
<h1>
Le film choisi est <?= $movie['title'] ?>
</h1>
<?php endforeach; ?>
Cette fois, on ne veut pas juste une simple requête SELECT * FROM movies
mais plutôt une requête avec des paramètres. C'est à dire avec des variables à inclure dedans. Par exemple :
$idMovie = 34; // cet ID peut venir de GET par exemple !
$request = "SELECT * FROM movies WHERE id = " . $idMovie;
Ou encore :
$search = "science-fiction""; // Ce paramètre peut venir de GET si on a cliqué sur le lien d'une catégorie, ou de POST pour un moteur de recherche par exemple !
$request = "SELECT * FROM movies WHERE category LIKE '%" . $search . "%'";
On exécute de la même manière la requête :
$response = $bdd->query($request);
// Si on n'attend qu'un élément (par exemple: un film trouvé par ID), on utilise fetch :
$movie = $response->fetch(PDO::FETCH_ASSOC);
// Si on attend plusieurs éléments (par exemple: la liste des films d'une catégorie), on utilise fetchAll :
$movies = $response->fetchAll(PDO::FETCH_ASSOC);
Si on n'a qu'un élément : pas besoin de boucle foreach !
<h1>Vous avez choisi le film <?= $movie['title'] ?>
Si on a plusieurs éléments, on passerait $movies
dans une boucle comme ci-dessus.