Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0
PDO c’est une librairie, intégrée à PHP qui permet d’interagir avec 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_phpj5";
$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 :
$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.
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'
];
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'
]
];
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);
}
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();
$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);
$query = $db->prepare("DELETE FROM user WHERE id = :id");
$parameters = [
'id' => $_POST['id']
];
$query->execute($parameters);