0% ont trouvé ce document utile (0 vote)
118 vues28 pages

Gestion des utilisateurs avec PHP PDO

Le document décrit l'utilisation de PDO pour se connecter à une base de données et exécuter des requêtes. Il montre comment effectuer des requêtes SELECT, INSERT, UPDATE et DELETE de manière préparée ou non. Le document présente également la gestion des transactions et des exceptions avec PDO.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
118 vues28 pages

Gestion des utilisateurs avec PHP PDO

Le document décrit l'utilisation de PDO pour se connecter à une base de données et exécuter des requêtes. Il montre comment effectuer des requêtes SELECT, INSERT, UPDATE et DELETE de manière préparée ou non. Le document présente également la gestion des transactions et des exceptions avec PDO.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

 PDO définit une interface d’abstraction pour

accéder de manière uniforme aux bases de


données.
 Il existe des implémentation pour la plupart
des SGDB connus.

PHP SGBD SGBD


PDO Driver
 Avec les fonction mysql_*
<?php
$link = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('testdb', $link);
mysql_set_charset('UTF-8', $link);

 Avec PDO
<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',
'username',
'password');
Le premier paramètre est la DSN (Data Source Name). Il définit le driver du
SGBD auquel on veut accéder.
Les deux autres sont le nom d’utilisateur et le mot de passe
On peut passer un troisième qui contient un tableau de paramètres
<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

// Requête SELECT :

$stmt = $db->query("SELSET * FROM table");

// $stmt est un objet de type « PDOStatment »

// Nombre d’enregistrements

echo $stmt->rowCount();

// Ici, on récupère tout les enregistrements dans un tableau associatif

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

// PDO présente plusieurs constantes accessibles par PDO::*


<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

// Requête INSERT:

$ret = $db->exec("INSERT INTO table (champ) VALUES ('valeur‘)");

// Récupration de la clé de l’enregistrement ajouté

$id = $db->lastInsertedId();
<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

// Requête DELETE :

$ret = $db->exec("DELETE FROM table (champ) WHERE id<10)");

// Requête UPDATE :

$ret = $db->exec("UPDATE table SET champ='valeur‘ WHERE id=10)");

// $ret représente le nombre d’enregistrements affectés


<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

// Requête préparée : $stmt est de type « PDOStatment

$id = 20;

stmt = $db->prepare("DELETE FROM table (champ) WHERE id=?)");

// Faire correspondre le paramètre représenté par « ? » :

$stmt->bindValue(1, $id, PDO::PARAM_INT);

// Exécuter la requête :

$stmt->execute();

// $stmt->rowCount() représente le nombre d’enregistrements affectés


<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

// Requête préparée : $stmt est de type « PDOStatment

stmt = $db->prepare("SELECT * FROM table WHERE nom LIKE ?");

// Faire correspondre le paramètre représenté par « ? » :

$stmt->bindValue(1, '%'.$nom.'%', PDO::PARAM_STR);

// Exécuter la requête :

$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
// Ici, $rows représente les enregistrements retournés sous forme
d’objets
<?php

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

// Requête préparée : $stmt est de type « PDOStatment

stmt = $db->prepare("SELECT * FROM table WHERE nom = :nom");

// Faire correspondre le paramètre représenté par « ? » :

$stmt->bindValue('nom', 'momo', PDO::PARAM_STR);

// Exécuter la requête :

$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
// Ici, $rows représente les enregistrements retournés sous forme
d’objets
<?php

try {

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',


'username', 'password');

stmt = $db->prepare("SELECT * FROM table WHERE nom = :nom");

$stmt->bindValue('nom', 'momo', PDO::PARAM_STRING);

$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);

} catch( PDOException $e){


echo "Une erreur s’est produite. " . $e->getMessage();
}
<?php

try {
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8',
'username', 'password');
$db->beginTransaction(); // Démarrer une transaction
stmt = $db->prepare("INSERT INTO COMMANDES … ");
$stmt->execute(…);
$stmt = $db->prepare("INSERT INTO CLIENTS… ");
$stmt->execute(…);
$db->commit(); // Valider la transaction

} catch( PDOException $e){


echo "Une erreur s’est produite. " . $e->getMessage();
$db->rollBack(); // Annuler la transaction
}
 On se propose de réaliser une application pour gérer
les utilisateurs.
 Un utilisateur est caractérisé par un identificateur
(entier), un nom (string), un email (string) et un mot
de passe.
 L’application doit permettre de :
 ajouter un utilisateur
 modifier un utilisateur
 Supprimer un utilisateur
 Afficher un utilisateur
 Afficher tout les utilisateurs
// classes/metier/[Link]
namespace metier;
class User {
private $idUser;
private $name;
private $email;
private $password;

public function __construct($name, $email, $pasword)


{
$this->name = $name;
$this->email = $email;
$this->password = $pasword;
}
// getters et setters
}
// classes/metier/[Link]
namespace metier;
interface IAdmin {

function ajouterUtilisateur(User $user);

function modifierUtilisateur(User $user);

function supprimerUtilisateur(User $user);

function getUtilisateur($idUser);

function listerUtilisateurs();
}
// classes/metier/[Link]
namespace metier;
use metier\User;
class UserManager implements IAdmin
{
private $pdo = null;
function __construct($dbname, $userName, $password)
{
$this->pdo = new \PDO(
"mysql:host=localhost;dbname=$dbname;charset=utf8",
$userName, $password);
$this->pdo->setAttribute(
\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}
function ajouterUtilisateur(User $user)
{
$stmt = $this->pdo->prepare("INSERT INTO users VALUES(null,?,?,?)");
$stmt->bindValue(1, $user->getName());
$stmt->bindValue(2, $user->getEmail());
$stmt->bindValue(3, $user->getPassword());
$stmt->execute();
}
// Suite
function modifierUtilisateur(User $user)
{
$stmt = $this->pdo->prepare(
"UPDATE users SET nom=:nom, email=:email,
password=:password WHERE user_id=:id");
$stmt->bindValue('id', $user->getIdUser());
$stmt->bindValue('nom', $user->getName());
$stmt->bindValue('email', $user->getEmail());
$stmt->bindValue('password', $user->getPassword());
$stmt->execute();
}

function supprimerUtilisateur(User $user)


{
$sql = "DELETE FROM users WHERE user_id=?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute(array($user->getIdUser()));
}
// Suite
function getUtilisateur($idUser)
{
$sql = "SELECT * FROM users WHERE user_id=?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute(array($idUser));
$row = $stmt->fetch(\PDO::FETCH_OBJ);
$user = null;
if ($row) {
$user = new User($row->nom, $row->email,
$row->password);
$user->setIdUser($row->user_id);
}
return $user;
}
// Suite
function listerUtilisateurs()
{
$sql = "SELECT * FROM users";
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(\PDO::FETCH_OBJ);
$users = array();
foreach($rows as $row){
$user = new User($row->nom, $row->email,
$row->password);
$user->setIdUser($row->user_id);
$users[] = $user;
}
return $users;
}
// [Link]
function __autoload($className){
try{
$path = "classes" .
DIRECTORY_SEPARATOR .
str_replace("\\",
DIRECTORY_SEPARATOR,$className) .
".php";

require_once($path);

}catch(Exception $e){
echo $e->getMessage();
}
}
// [Link]
use metier\User;
use metier\UserManager;

require_once "[Link]";

// Création du manager
$um = new UserManager("mng", "root", "");

$user1 = new User("momo", "momo", "momo");


$user2 = new User("toto", "toto", "toto");

// Test Ajout des utilisateurs


echo "<hr>Ajout des utilisateurs<br>";
$um->ajouterUtilisateur($user1);
$um->ajouterUtilisateur($user2);
// Suite
// Test Lister Utilisateurs
echo "<hr>Lister les utilisateurs<br>";
foreach($um->listerUtilisateurs() as $user){
var_dump($user);
}

// Test Lister Utilisateurs


echo "<hr>Modifier tous les utilisateurs<br>";
foreach($um->listerUtilisateurs() as $user){
$user->setName(strtoupper($user->getName()));
$um->modifierUtilisateur($user);
}
foreach($um->listerUtilisateurs() as $user){
var_dump($user);
}
// Suite
// Test Suppression Utilisateurs
echo "<hr>Suppression tous les utilisateurs<br>";
foreach($um->listerUtilisateurs() as $user){
$um->supprimerUtilisateur($user);
}

// Afficher s'il ya encore des utilisateurs


var_dump($um->listerUtilisateurs());

Vous aimerez peut-être aussi