Exemple de connexion
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
print "Erreur !: " . $e->getMessage() . "<br/>";
die();
}
Exemple avec sqlite
<?php
try {
$dbh = new PDO('sqlite:mydatabase.db');
} catch (PDOException $e) {
print "Erreur !: " . $e->getMessage() . "<br/>";
die();
}
$sql = "SELECT * FROM utilisateurs";
$stmt = $pdo->query($sql);
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo 'ID : ' . $row['id'] . ' - Nom : ' . $row['nom'] . ' - Prénom : ' . $row['prenom'] . ' - Email : ' . $row['email'] . '';
}
} else {
echo 'Aucun utilisateur trouvé.';
}
PDO::FETCH_ASSOC : retourne un tableau associatif indexé par le nom de la colonne.PDO::FETCH_NUM : retourne un tableau indexé par le numéro de la colonne.PDO::FETCH_BOTH (mode par défaut): retourne un tableau associatif indexé par le nom de la colonne et par le numéro de la colonne.PDO::FETCH_OBJ : retourne un objet anonyme avec des propriétés qui correspondent aux colonnes.<?php
$db = new PDO('mysql:host=localhost;dbname=php', 'php', 'php');
$request = $db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages');
while ($perso = $request->fetch(PDO::FETCH_ASSOC)) // Chaque entrée sera placée dans un array.
{
echo '</br>'.$perso['nom'], ' a ', $perso['forcePerso'], ' de force, ', $perso['degats'], ' de dégâts, ',
$perso['experience'], ' d\'expérience et est au niveau ', $perso['niveau'];
}
–> Lien vers la page de test:
http://localhost:2023/exemple-pdo-select.php
<?php
$sql = "INSERT INTO utilisateurs (nom, prenom, email) VALUES ('Doe', 'John', 'john.doe@uga.fr')";
if ($pdo->exec($sql) !== false) {
echo 'Utilisateur ajouté.';
} else {
echo 'Erreur lors de l\'ajout de l\'utilisateur.';
}
<?php
$db = new PDO('mysql:host=localhost;dbname=php', 'php', 'php');
$sql = "INSERT INTO personnages (nom, forcePerso, degats, niveau, experience) VALUES ('Zorglub', 80, 10, 1, 0)";
if ($db->exec($sql) !== false) {
echo 'Personnage ajouté.';
} else {
echo 'Erreur lors de l\'ajout du personnage.';
}
–> Lien vers la page de test:
http://localhost:2023/exemple-pdo-insert.php
<?php
$sql = "INSERT INTO utilisateurs (nom, prenom) VALUES (:nom, :prenom)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':prenom', $prenom);
$nom = 'Doe';
$prenom = 'John';
if ($stmt->execute() !== false) {
echo 'Utilisateur ajouté.';
} else {
echo 'Erreur lors de l\'ajout de l\'utilisateur.';
}
$nom = 'Smith';
$prenom = 'Jane';
$stmt->execute();
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
while ($row = $stmt->fetch()) {
print_r($row);
}
}
?>
Rappels sur la structure d'une BDD
<?php
// On admet que $db est un objet PDO
$request = $db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages');
while ($perso = $request->fetch(PDO::FETCH_ASSOC)) // Chaque entrée sera placée dans un array.
{
echo $perso['nom'], ' a ', $perso['forcePerso'], ' de force, ', $perso['degats'], ' de dégâts, ', $perso['experience'], ' d\'expérience et est au niveau ', $perso['niveau'];
}
?>
Les colonnes de la table de la base de données!
<?php
class Personnage
{
private $id;
private $nom;
private $forcePerso;
private $degats;
private $niveau;
private $experience;
}
?>
Reprenons le code pour récupérer les données de la BDD et modifions le pour manipuler des objets
<?php
// On admet que $db est un objet PDO
$request = $db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages');
while ($perso = $request->fetch(PDO::FETCH_ASSOC)) // Chaque entrée sera placée dans un array.
{
// On passe les données (stockées dans un tableau) du personnage au constructeur de la classe.
// On admet que le constructeur de la classe appelle chaque setter pour assigner les valeurs qu'on lui a données aux attributs correspondants.
$perso = new Personnage($perso);
echo $perso->nom(), ' a ', $perso->forcePerso(), ' de force, ', $perso->degats(), ' de dégâts, ', $perso->experience(), ' d\'expérience et est au niveau ', $perso->niveau();
}
?>
PDO::FETCH_CLASS<?php
class Personnage
{
private $id;
private $nom;
private $forcePerso;
private $degats;
private $niveau;
private $experience;
}
$request = $db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages');
$request->setFetchMode(PDO::FETCH_CLASS, 'Personnage');
while ($perso = $request->fetch()) {
echo $perso->nom, ' a ', $perso->forcePerso, ' de force, ', $perso->degats, ' de dégâts, ', $perso->experience, ' d\'expérience et est au niveau ', $perso->niveau;
}
?>
Exemple d'injection SQL
$sql = "SELECT * FROM utilisateurs WHERE nom = '" . $_GET['name'] . "'";
$stmt = $pdo->query($sql);
–> Lien vers la page de test:
http://localhost:2023/exemple-injection-sql.php?name=%3D+%27+OR+1%3D1%3B+--
$pdo = new PDO('mysql:host=localhost;dbname=test') ;
$sql = "SELECT * FROM utilisateurs WHERE nom='$nom' AND passwd='$passwd'";
$stmt = $pdo->query($sql);
if ($stmt->rowCount() > 0) {
echo 'Bienvenue ' . $nom . ' :)';
echo 'Vos informations sensible' . $prenom . ' - ' . $email . ' - ' . $passwd;
} else {
echo 'Login ou mot de passe incorrect.';
}
SELECT * FROM utilisateurs WHERE nom='admin' AND passwd='1234' OR '1'='1'