0% ont trouvé ce document utile (0 vote)
103 vues11 pages

PDO en PHP

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 11

PDO en PHP

PDO en PHP

1. Définition

L’extension PHP Data Objects, notée PDO, définit une interface d’abstraction pour accéder à une
base de données depuis PHP. PDO fait intervenir le concept de programmation orientée objet.

Remarque

 PDO requiert les fonctionnalités orientées objet fournies par PHP5 et ne fonctionne pas
avec les versions antérieures de PHP.
 PDO fournit une interface d’abstraction pour l’accès aux données d’une base et non pas une
abstraction de la base de données. (Il n’y a pas une réécriture de SQL).
 PDO supporte la plupart de bases de données telles que MySQL, Oracle, PostgreSQL, etc.

2. Gestion de connexion
2.1. Connexion à la base de données

Indépendamment du driver de la base utilisé, l’établissement d’une connexion se faiten instanciant


la classe PDO.

Syntaxe

$objet_PDO = new PDO ("dsn","nom_d_utilisateur","mot_de_passe") ;

Avec :

 $objet_PDO : indique le nom de l’objet instancié ( utilisé pour accéder à la base de


données).
 dsn : (Data Source Name) désigne la source de la base de données. 
Ce paramètre se compose comme suit :

1
«type_de_base:host=machine_qui_héberge_la_base;dbname=nom_de_la_bas
»

avec :

- type_de_base : désigne le type de la base utilisée. Il correspond à l’une des


valeurs suivantes :

 mssql (FreeTDS/Microsoft SQL Server/Sybase)


 mysql (MySQL 3.x/4.x/5.x)
 oci (Oracle Call Interface)
 pgsql (PostgreSQL)
 ……..

- host=machine_qui_héberge_la_base : désigne l’adresse de la machine


qui héberge la base de donnée (exemple :localhost).
- dbname=nom_de_la_base : désigne le nom de la base de données.

 nom_d_utilisateur : désigne le nom de l’utilisateur de la base.


 mot_de_passe : désigne le mot de passe de l’utilisateur de la base de données.

2.2. Déconnexion de la base de données

La déconnexion de la base est réalisée de 3 façons différentes :

 On assigne null à la variable gérant l’objet PDO. ($objet_PDO = null).


 On utilise la fonction unset(). (unset($objet_PDO)).
 PHP ferme automatiquement la connexion lorsque le script termine son
exécution.

3. Exécution d’une requête


3.1. La méthode query()
Syntaxe

$res = $objet_PDO->query('requete_SQL') ;

Avec :

 $res : désigne un objet de type PDOStatemet. Il permet la manipulation du

2
résultat de la requête.
 $objet_PDO : désigne l’objet PDO permettant l’accès à la base de données.
 requete_SQL : c’est une requête sql.

La fonction query() exécute une requête SQL et retourne un jeu de résultats en tant
qu’objet de type PDOStatement.

3.2. La méthode exec()

Syntaxe

$nb = $objet_PDO->exec('requete_SQL') ;

Avec :

 $nb : désigne le nombre de ligne affectées par la requête.


 $objet_PDO : désigne l’objet PDO permettant l’accès à la base de données.
 requete_SQL : c’est une requête de modification/insertion (UPDATE, INSERT,
DELETE).

La fonction exec() exécute une requête SQL. Elle est bien adaptée pour les requêtes
autres que Select et retourne le nombre de lignes affectées par la requête.

4. Exploitation du résultat d’une requête Select


4.1. Nombre de lignes et de colonnes retournés par une requête

Les fonctions rowCount() et columnCount() permettent de retourner respectivement le


nombre de lignes et le nombre de colonnes d’une requête.

Syntaxe

$res = $objet_PDO->query('requete_SQL') ;
$res->rowCount() ; //retourne le nombre de lignes
$re->columnCount() ; //retourne le nombre de colonnes

4.2. Accès aux résultats d’une requête

Après avoir exécuté la requête Select par la fonction query(), la fonction fetchAll()
permet de renvoyer un tableau à deux dimensions (ligne, colonne) contenant le résultat.
3
L’accès à ce tableau peut être effectué par les indices ou par les noms des colonnes.

Syntaxe

$res = $objet_PDO->query('requete_SQL') ;
$res->fetchAll() ;

Avec :

 $res : désigne un objet de type PDOStatemet. Il permet la manipulation du


résultat de la requête.
 $objet_PDO : désigne l’objet PDO permettant l’accès à la base de données.
 requete_SQL : c’est une requête Select.

Exemple

On se donne la table Personne (CIN, Nom, Prénom, Age)

$res = $obj_PDO->query("SELECT * FROM Personne");


$data = $res->fetchAll();
//Accès par les noms des colonnes

foreach ($data as $ligne) {


echo $ligne["Nom"] . " : " . $ligne["Age"] . "<br/>";
}
//Accès par les numéros des colonnes
foreach ($data as $ligne) {
for ($i=0;$i<$res->columnCount() ; $i++) {
echo $ligne[$i]."** ";
}
echo "<br/>";
}
//Accès par les numéros des lignes et les numéros des colonnes
for ($l=0;$l<$res->rowCount();$l++) {
for ($i=0;$i<$res->columnCount();$i++) {
echo $data[$l][$i]." ** ";
}
echo "<br/>";
}
5. Les requêtes préparées
5.1. Définition
Une requête préparée (ou requête paramétrable) est une requête récurrente, que l’on
compile avec des variables, et donc réutilisable (exécutée plusieurs fois) en fournissant
4
les valeurs manquantes.
Avantages d’une requête préparée
 Performances (la requête est déjà compilée)
 Éviter les risques d’injection SQL (paramètres transmis sous forme binaire)
 Économiser la bande passante

5.2. Construction et exécution


5.2.1. La méthode prepare()

Syntaxe

PDOStatement prepare(string $requête[,array $options_driver =array()])

Avec:

 $requête : désigne la requête SQL préparée.


 $options_driver : Ce tableau contient une ou plusieurs paires « clé=>valeur »
pour définir les valeurs des attributs pour l’objet PDOStatement que cette
méthode retourne.

Si le serveur de base de données prépare avec succès la requête, la méthode


prepare() retourne un objet PDOStatement. Si le serveur de base de données ne réussit
pas à préparer la requête, la méthode prepare() retourne FALSE ou émet une
exception PDOException.

5.2.2. La méthode execute()


Syntaxe
bool execute ([array $paramètres_Entrée] )

Avec:
 $paramètres_Entrée : Un tableau de valeurs avec autant d’éléments qu’il y a de
paramètres à associer dans la requête SQL qui sera exécutée.

La méthode execute() retourne TRUE en cas de succès ou FALSE si une erreur


survient.

5
5.2.3. La méthode bindParam()

Syntaxe

bool bindParam (mixed $paramètre , mixed &$variable [, int


$data_type = PDO::PARAM_STR [, int $taille [, mixed
$options_driver ]]] )

Avec:

 $paramètre : Il s’agit d’un identifiant. Pour une requête préparée utilisant des
marqueurs nommés, ça sera le nom du paramètre sous la forme :name. Pour une
requête préparée utilisant les marqueurs interrogatifs, ce sera la position indexé
-1 du paramètre.

6
 $variable : C’est le nom de la variable PHP à lier au paramètre de la requête
SQL.
 data_type : désigne le type explicite de données pour le paramètre utilisant la
constante PDO::PARAM_* constants. C’est un paramètre optionnel.
 $taille : désigne la longueur du type de données. C’est un paramètre optionnel.
 $options_driver : cela désigne les options liées au driver. C’est un paramètre
optionnel.

La méthode bindParam() retourne TRUE en cas de succès ou FALSE si une erreur


survient. Elle permet de lier une variable PHP à un marqueur nommé ( :name) ou
interrogatif ( ?) correspondant dans une requête SQL utilisée pour préparer la requête.

Exemple

Exécution d’une requête préparée avec des emplacements nommés

<?php
/* Exécution d’une requête préparée en liant des variables PHP */
$calories = 150;
$couleur = 'rouge';
$sth = $dbh->prepare('SELECT nom, couleur, calories
FROM fruit
WHERE calories < :calories AND couleur = :couleur');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':couleur', $couleur, PDO::PARAM_STR, 12);
$sth->execute();
?>

Exécution d’une requête préparée avec des marques de positionnement

<?php
/* Exécution d’une requête préparée en liant des variables PHP */
$calories = 150;
$couleur = 'rouge';
$sth = $dbh->prepare('SELECT nom, couleur, calories
FROM fruit
WHERE calories < ? AND couleur = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $couleur, PDO::PARAM_STR, 12);
$sth->execute();
?>

7
6. Gestion des transactions

Une transaction est un ensemble d’actions qui prend la base de données dans un état
cohérent et elle la rend dans un autre état cohérent. Elle donne l’illusion à l’utilisateur
d’être seule à utiliser la base de données. L’exécution d’une transaction se termine par
commit ou abort (rollback) :

 Commit : la transaction est réussie, ses mises à jour sont incorporées dans la
BD. On utilise la méthode PDO commit().
 Abort : la transaction a échoué, elle n’a aucun effet sur la base de données. On
utilise la méthode PDO rollback().

Remarque

Pour marquer le début d’une transaction, on utilise la méthode PDO


beginTransaction().

Exemple

<?php
try
{
//on tente d’exécuter les requêtes suivantes dans une
transaction

8
//on lance la transaction
$pdo->beginTransaction();
//Les 3 requêtes à exécuter
$pdo->query('$req1');
$pdo->query('$req2');
$pdo->query('$req3');
//si jusque là tout se passe bien on valide la transaction
$pdo->commit();
}
catch(Exception $e) //en cas d’erreur
{
//on annule la transation
$pdo->rollback();
//on affiche un message d’erreur ainsi que les erreurs
echo 'Erreur d’exécution, voir les erreurs ci-dessous <br/>';
echo 'Erreur : ' . $e->getMessage() . '<br />';
echo 'N° : ' . $e->getCode();
//on arrête l’exécution s’il y a du code après
exit();
}

9
Références

Références

[1] Pauchet A., Technologie Web PHP, 2010, sous licence CC-By-NC,
https://moodle.insa-rouen.fr/mod/resource/view.php?id=5213
[2] Nebra M., Concevez votre site web avec PHP et MySQL, 2012, sous licence CC-
By-NC-SA 2.0, https://openclassrooms.com/courses/concevez-votre-site-web-
avec-php-et-mysql

Vous aimerez peut-être aussi