Você está na página 1de 24

La classe PDO

Houda Rekaya Houissa


PDO, PHP Data Object

PDO (PHP Data Object) est la principale


nouveaut de PHP 5.
Cette extension apportera un confort dutilisation
et une abstraction plus importants que les
anciennes fonctions natives propres chaque
SGBD.
Lapproche objet de PDO permettra de plus
dtendre les fonctions daccs une base
facilement et de manire transparente.
PDO, PHP Data Object

En interne, PDO permet de dvelopper


beaucoup plus rapidement de nouveaux
connecteurs vers de nouvelles bases de
donnes. Au lieu de tout rcrire partir du
dbut comme auparavant, ils peuvent se baser
sur une architeture complte et ne rajouter que
ce qui est spcifique.
PDO est un socle commun pour les connecteurs
vers les SGBD. Il soccupe doffrir des fonctions
de base ainsi que dunifier les interfaces
utilisateur.
Utilisation d'une base de donnes

Lutilisation d'une base de donnes avec PHP


seffectue en cinq tapes.
Notons que la dernire action nest pas
obligatoire. La connexion est automatiquement
ferme la fin de lexcution du script par le
moteur PHP.
Garder ouverte une connexion
si on ne sen sert plus peut toutefois occuper
inutilement des ressources.
Utilisation de PHP pour accder une
base de donnes
Structure des classes de PDO

Il existe trois classes principales lies


lutilisation de PDO :
1 - La classe PDO qui correspond au lien la
base de donnes ;
2 - La classe PDOStatement
PDOStatemen qui correspond aux
requtes, ainsi qu leur rsultat ;
3 - La classe PDOException qui permet de
traiter les erreurs.
Exemple
Exemple

1 - Dfinition des variables de connexion


$user = 'USER1';
$pass = 'motdepasse';
$dsn='mysql:host=localhost;dbname=publication';

2 - Connexion la base de donnes


try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
echo ( "Erreur ! : " . $e->getMessage() );
}
Exemple

3 - Insertion dun enregistrement


$sql = "INSERT INTO auteur (login) VALUES
('roms')";
$dbh->exec($sql) ;
4 - Lecture denregistrements
$sql = "SELECT login FROM auteur";
$resultat = $dbh->query($sql);
while ($row = $resultat->fetch()) {
print_r($row);
}
5 - Fermeture de la connexion
$dbh = NULL;
Connexion au serveur de donnes

Avant de travailler avec un serveur de gestion de


base de donnes comme MySQL, il faut ouvrir
une connexion. Cette connexion sera le canal par
lequel PHP et MySQL communiqueront lun avec
lautre.
La premire chose faire est de crer une instance
de la classe PDO.
Le premier paramtre du constructeur de classe est
le DSN (Data Source Name), le second le nom
dutilisateur, et le troisime le mot de passe.
Cration d'un fichier de configuration

<?php
define('USER1', 'Nom);
define('PASS1', 'motdepasse');
define('DSN1',
'mysql:host=localhost;dbname=publication');
try {
$dbh = new PDO(DSN1, USER1, PASS1);
} catch (PDOException $e) {
print "Erreur ! : " . $e->getMessage() . "<br/>";
die();
}
?>
Effectuer une requte

Pour envoyer une requte au serveur, on peut utiliser


deux mthodes de lobjet PDO :
exec() et query().

Pour une requte ne renvoyant pas de rsultats


(UPDATE,INSERT...), il faut utiliser la mthode exec()
qui retourne le nombre de lignes concernes par la
requte.

La mthode exec() permet dexcuter une requte


mais ne renvoie que le nombre de lignes modifies
on sen servira gnralement pour faire des insertions,
des modifications ou des suppressions.
Effectuer une requte

Pour une requte renvoyant des rsultats


(SELECT, DESC, SHOW ou EXPLAIN), il
faudra utiliser la mthode query() qui retourne
une instance de lobjet PDOStatement
contenant les rsultats qu'on pourra rutiliser
par la suite pour les lire.

La mthode query() permet de rcuprer des


donnes. Elle renvoie une instance de la
classe PDOStatement
Requte de slection

Aprs lexcution dune requte de slection, les


donnes ne sont pas affiches, elles sont
simplement mises en mmoire. Il faut donc aller
les chercher et les afficher.

La mthode query() vous renvoie une instance de


la classe PDOStatment. Cette dernire
dispose de deux mthodes qui permettront de
manipuler les donnes renvoyes :
Requte de slection

La mthode fetchAll() retourne lensemble des


donnes sous forme dun tableau PHP
et libre le SGBD. Le contrecoup de cette faci-
lit dutilisation est une charge importante au
niveau du serveur. La totalit des donnes
seront en effet localises en mmoire.

PDOStatement::fetchAll ( [fetch_style] )
Lire tous les enregistrements

Tous les enregistrements sont renvoys dans un


tableau par la mthode fecthAll(). Il
suffit donc de parcourir le tableau en affichant son
contenu.
Exemple

?php

include_once('connect.inc.php');
// Lecture denregistrements
$sql = "SELECT login, nom, prenom FROM auteur";
$sth = $dbh->query($sql);
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row){
echo $row['nom']; echo '-';
echo $row['prenom']; echo '-';
echo $row['login']; echo '<br/>';
}
// Fermeture de la connexion
$dbh = NULL;
Requte dinsertion / modification

Pour les requtes dinsertion et de modification,


on utilise la mthode exec() de PDO.
La mthode exec() permet dexcuter une
requte et ne renvoie que le nombre de lignes
modifies : on sen servira gnralement pour
faire des insertions, des modifications ou
des suppressions.
L'insertion

// Inclusion du fichier contenant la connexion la


base
include_once('connect.inc.php');
// Insertion dun enregistrement

$sql = "INSERT INTO auteur (login, nom, prenom)


VALUES ('Alfredo','Bie', 'Alfred')" ;

$dbh->exec($sql);
La suppression
<?php
// Inclusion du fichier contenant la connexion la
base
include_once('connect.inc.php');
$sql = "DELETE FROM rmq WHERE pseudo='John'";
// Modification denregistrement
$retour = $dbh->exec($sql);
if($retour === FALSE){
die('Erreur dans la requte') ;
}elseif($retour === 0){
echo 'Aucune modification effectue';
}else{
echo $retour . ' lignes ont ts affectes.';
}
?>
La modification

<?php
// Inclusion du fichier contenant la connexion la base
include_once('connect.inc.php') ;

$sql = "Update personne set prenom='0' WHERE cin='6'" ;

$dbh->exec($sql) ;
Exemple
Soit la table personne (cin, nom, prenom)

Connexion la base :

<?php
$user = 'root';
$pass = '';
$dsn='mysql:host=localhost;dbname=test';

try {
$dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
echo ( "Erreur ! : " . $e->getMessage() );
}
Exemple

La Selection :

$sql = "SELECT cin, nom, prenom FROM


personne";
$sth = $dbh->query($sql);
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row){
echo $row['cin']; echo '-';
echo $row['nom']; echo '-';
echo $row['prenom']; echo '<br/>';
}
Exemple
- L'insertion
$sql = "INSERT INTO personne (cin, nom,
prenom)
VALUES ('6','8', '9')";
$dbh->exec($sql) ;

- La mise jour :
$sql = "Update personne set prenom='0' WHERE
cin='6'";
$dbh->exec($sql);

- La suppression :
$sql = "DELETE FROM personne WHERE cin=2";
$dbh->exec($sql);

Você também pode gostar