0% ont trouvé ce document utile (0 vote)
13 vues29 pages

Introduction à PDO en PHP

Ce document décrit PDO, PHP Data Object. Il explique ce qu'est PDO, ses avantages, et comment s'en servir pour se connecter à une base de données et exécuter des requêtes.

Transféré par

zidane
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 PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
13 vues29 pages

Introduction à PDO en PHP

Ce document décrit PDO, PHP Data Object. Il explique ce qu'est PDO, ses avantages, et comment s'en servir pour se connecter à une base de données et exécuter des requêtes.

Transféré par

zidane
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 PPTX, PDF, TXT ou lisez en ligne sur Scribd

PDO, PHP Data Object

ENSET RABAT GLR [Link] 2014/2015


PDO, PHP Data Object

Objectifs de ce module
En suivant ce module vous allez :

 Expliquer PDO.
 Utilisez PDO dans un projet PHP.
 Gérer les transactions avec PDO.
 Expliquer et utiliser les
commandes préparées.
2014/2015
[Link]
GLR
ENSET RABAT
PDO, PHP Data Object

Plan du module
Voici les parties que nous allons aborder :
 Introduction
 Bases.
 Gestion des transactions.
 Les déclarations préparées.
2014/2015
[Link]
GLR
ENSET RABAT
PDO, PHP Data Object

Introduction

Pourquoi PDO ?

ENSET RABAT GLR [Link] 2014/2015


Introduction

Plan de la partie
Voici les points que nous allons aborder:

 Avant PDO ......


 ...... et maintenant.
 Architecture PDO.
 Avantages.
 Installation.
2014/2015
[Link]
GLR
ENSET RABAT
Introduction

Avant PDO…
 PDO est uniquement disponible depuis PHP 5.
 En PHP 4, vous devez utiliser l'une des extension
native dédiée à l'accès aux bases de données:
 mysqli pour MySQL.
 oci8 pour Oracle....
 Chaque extension fournit différentes fonctions
spécifiques.
2014/2015

 Besoin de changer le code si vous voulez changer


le SGBD!
[Link]

 Les extensions ne sont pas orienté objet.


 Pas une bonne approche ...
GLR
ENSET RABAT
Introduction

… et maintenant.
 PDO est la principale nouveauté de PHP 5.1.
 Offre une facilité d'utilisation et une plus grande
abstraction.
 Une base commune pour tous les connecteurs SGBD:
 Plus besoin de modifier le code lorsque vous
souhaitez changer de SGBD.
 Ou presque ...
2014/2015
[Link]
GLR
ENSET RABAT
Introduction

PDO Architecture

PDO
MySQL

PDO
Oracle

PHP >= 5.1 PDO MySQL


2014/2015

PDO
SQL Server
[Link]

PDO
GLR


ENSET RABAT
Introduction

Avantages
 PDO est écrit en langage C:
 Performances similaires aux anciens pilotes natifs.
 Opportunités d'optimisation grâce à des déclarations
préparées.
 Non disponible avec l'ancienne extension MySQL
 .PDO peut exécuter tous les types de requêtes:
 INSERT, UPDATE, DELETE, SELECT
2014/2015

 Procédure stockée.
[Link]
GLR
ENSET RABAT
Introduction

Installation
 PDO et tous les grands pilotes avec PHP sont utilisés
en tant qu'extensions partagées.
 Il vous suffit de les activer en éditant le fichier [Link]:
 Si vous utilisez une version de PHP <5.3:
 Ajouter ou décommenter la ligne suivante:

 For all PHP version : ;(ou .dll sous Windows)


extension=php_pdo.so
2014/2015

 Ajouter ou décommenter la ligne suivante :


[Link]

extension=php_pdo_mysql.so ;(ou .dll)


GLR
ENSET RABAT
Introduction

Avez-vous des questions?


2014/2015
[Link]
GLR
ENSET RABAT
PDO, PHP Data Object

Bases

connexion à une base de données, exécuter une


requête, ...

ENSET RABAT GLR [Link] 2014/2015


Bases

Plan de la partie
Voici les points que nous allons aborder:

 Classes PDO.
 Exemple de PDO.
 Connexion de base de données.
 Effectuer une requête.
 Récupérer les résultats.
 Les types de Fetch.
20123
[Link]
3ième ISI
ENSET RABAT
Bases

PDO Classes
 Les trois principales catégories de classes PDO que
nous utilisons sont:
 PDO: Connexion à une base de données.
 PDOStatement: représente une déclaration et ses
résultats.
 PDOexception: Exception levée lorsqu'une erreur
se produit.
2014/2015
[Link]
GLR
ENSET RABAT
Bases

PDO Exemple
$u= 'root';
$p = '';
$dsn = 'mysql:host=localhost;dbname=Exemple';

try {
$pdo = new PDO($dsn, $u, $p);
} catch (PDOexception $e) {
die("Error ! : ".$e->getMessage());
}
2014/2015

$pdo->exec("INSERT INTO exemple(col) VALUES ('val')");

$result = $pdo->query("SELECT col FROM exemple");


[Link]

while($row = $result->fetch()) {
print_r($row);
GLR

}
ENSET RABAT

$pdo = NULL;
Bases

Connexion à la base de données


 La première chose à faire est de créer une instance de la classe
PDO.
 Le constructeur prend trois paramètres:
 DSN (Nom de la source base de données):
Les informations concernant la base de données à utiliser.
Exemple pour une base de données MySQL

mysql:host=localhost;port=3306;dbname=Exemple
2014/2015

 Le nom d'utilisateur à utiliser pour se connecter à la


base de données.
 Le mot de passe du compte.
[Link]

Créer une instance PDO peut lever une exception:


GLR

 Si le driver requis n'est pas chargé.


ENSET RABAT

 Si l'accès est refusé.


Bases

Connexion à la base de données


 Pour utiliser plusieurs bases de données, il suffit
de créer plusieurs instance PDO:

$u1 = 'root'; $p1 = '';


$dsn1 = 'mysql:host=localhost;dbname=Exemple1';

try {
$pdo1 = new PDO($dsn1, $u1, $p1);
} catch (PDOexception $e) { die(); }
2014/2015

$u2 = 'root';
$p2 = '';
$dsn2 = 'mysql:host=localhost;dbname=Exemple2';
[Link]

try {
GLR

$pdo2 = new PDO($dsn2, $u2, $p2);


ENSET RABAT

} catch (PDOexception $e) { die(); }


Bases

Execution de requêtes
 Une fois que votre connexion est ouverte, vous pouvez
exécuter la requête grâce à deux méthodes d'instance
PDO:
 int exec ( string $statement ) :
 Exécute une instruction SQL dans un seul appel
de fonction, retourne le nombre de lignes
affectées par l'instruction
 PDOStatement query ( string $statement ) :
2014/2015

 Exécute une instruction SQL dans un seul appel


de fonction, retourne le jeu de résultats (le cas
[Link]

échéant) renvoyée par l'instruction comme un


objet PDOStatement
GLR
ENSET RABAT
Bases

Execution de requêtes
Instruction SQL Méthode PDO

INSERT exec()

UPDATE exec()

DELETE exec()

SELECT query()
2014/2015

EXPLAIN query()
[Link]

SHOW query()
GLR

DESC query()
ENSET RABAT
Bases

Récupérer des données


 Après un appel à la méthode query() les données extraites sont
conservées en mémoire, à l'intérieur d'une instance de
PDOStatement.
 Les deux principales méthodes pour manipuler ces données sont
les suivantes:
 array fetchAll( [ $fetch_style=PDO::FETCH_BOTH] )
 Retourne un tableau contenant toutes les lignes du résultat
d'ensemble..
2014/2015

 mixed fetch( [$fetch_style=PDO::FETCH_BOTH] )


 Lit une ligne dans un jeu de résultats associé à un objet
[Link]

PDOStatement.
 Le paramètre fetch_style détermine la façon dont PDO retourne
GLR

la ligne..
ENSET RABAT
Bases

Récupérer des données


 La méthode fetchAll () retourne toutes les données
dans un tableau.
 Très facile à utiliser!
 Mais ce n'est pas conseillé si la requête retourne
un grand nombre de résultat!
 Dans ce cas, la méthode fetch () est le meilleur
choix!
2014/2015
[Link]
GLR
ENSET RABAT
Bases

Récupérer des données


 Exemple de Fetch all :
$sql = "SELECT nom_utilisateur, mot_passe FROM
utilisateurs";
$sth = $pdo->query($sql);
$result = $sth->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $row) {
echo $row['nom_utilisateur'].'-'.
$row['mot_passe'].'<br/>';}
 Exemple de fetch séquentiel :
2014/2015

$sql = "SELECT nom_utilisateur, mot_passe FROM


utilisateurs";
[Link]

$sth = $pdo->query($sql);
GLR

while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
ENSET RABAT

echo $row['nom_utilisateur'].'-'.
$row['mot_passe'].'<br/>';}
Bases

Styles de Fetch
VALUE ACTION

Retourne un tableau indexé par nom


PDO::FETCH_ASSOC de colonne comme un jeu de
résultats.
Retourne un tableau indexé par le
PDO::FETCH_NUM numéro de colonne retourné dans le
jeu de résultats, en commençant à 0.
Retourne un tableau indexé par le
PDO::FETCH_BOTH nom et le numéro de la colonne
2014/2015

indexée dans le jeu de résultats.


Retourne un objet anonyme avec les
noms de propriétés correspondant
PDO::FETCH_OBJ
[Link]

aux noms des colonnes retournées


dans le jeu de résultats.
GLR

Retourne une nouvelle instance de la


classe demandée, liant les colonnes
ENSET RABAT

PDO::FETCH_CLASS du jeu de résultats aux propriétés


nommées dans la classe.
Bases

Styles de Fetch
 PDO::FETCH_ASSOC :

$sql = "SELECT nom_utilisateur, mot_passe FROM


utilisateurs";

$sth = $pdo->query($sql);
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($result);

Array
2014/2015

(
[0] => Array
(
[Link]

[nom_utilisateur] => ENSET


[mot_passe] => 1234
GLR

)
ENSET RABAT

)
Bases

Styles de Fetch
 PDO::FETCH_BOTH :

$sql = "SELECT nom_utilisateur, mot_passe FROM


utilisateurs";

$sth = $pdo->query($sql);
$result = $sth->fetchAll(PDO::FETCH_BOTH);
print_r($result);

Array
2014/2015

(
[0] => Array
(
[nom_utilisateur] => ENSET
[Link]

[0] => ENSET


[mot_passe] => 1234
GLR

[1] => 1234


ENSET RABAT

)
Bases

Styles de Fetch
 PDO::FETCH_OBJ :

$sql = "SELECT nom_utilisateur, mot_passe FROM


utilisateurs";

$sth = $pdo->query($sql);
$result = $sth->fetchAll(PDO::FETCH_OBJ);
print_r($result);
2014/2015

Array
(
[0] => stdClass Object
(
[Link]

[nom_utilisateur] => ENSET


[mot_passe] => 1234
GLR

)
ENSET RABAT

)
Bases

Dernier ID inseré
 Lorsque vous insérez une nouvelle ligne dans une table, c’est
fréquemment le SGBD qui génère la clé primaire.
 Vous pouvez récupérer le dernier ID généré grâce à la méthode
d'instance de PDO:
 String lastInsertId ([string $ name = NULL]):
 Si un nom de séquence n'a pas été spécifié pour le
paramètre de nom, retourne une chaîne représentant l'ID de
ligne de la dernière ligne insérée.
2014/2015

 Sinon, retourne une chaîne représentant la dernière valeur


récupérée à partir de l'objet de séquence spécifiée.
[Link]

$sql = "INSERT INTO utilisateurs (nom_utilisateur,


mot_passe) VALUES ('isi.g1', 'ENSET')”;
$pdo->exec($sql);
GLR

echo $pdo->lastInsertId();
ENSET RABAT

// Afficher le dernier ID généré


ENSET RABAT GLR [Link] 2014/2015
Bases

Avez-vous des questions?


Bases

Exercices
 Maintenant, vous savez comment utiliser la base de
données en PHP avec PDO!
 Créer deux nouvelles classes:
 PdoUserManager implémente l'interface
UserManager.
 PdoPostManager implémente l'interface
PostManager.
 Mettre en œuvre des méthodes utilisant PDO et une
2014/2015

base de données MySQL.


 Mettez à jour votre page PHP pour utiliser vos nouveaux
[Link]

administrateurs à la place des anciens.


 S’Ils ne sont pas enregistrés, ajouter les directement
GLR

dans la base avec l’outil MySQL phpMyAdmin.


ENSET RABAT

Vous aimerez peut-être aussi