Académique Documents
Professionnel Documents
Culture Documents
PDO
Jrme CUTRONA
jerome.cutrona@univ-reims.fr
PDO :
connexion PHP / base de donnes
__construct()
exec(), prepare(), query()
errorCode(), errorInfo()
getAttributes(), setAttribute()
lastInsertId(), quote()
beginTransaction()
commit(), rollBack()
getAvailableDrivers()
PDOStatement :
requte prpare, jeu de rsultats
bindColumn(), bindParam(), bindValue(),
closeCursor()
errorCode(), errorInfo()
fetch(), fetchAll(), fetchColumn(), fetchObject(),
setFetchMode(), nextRowset()
rowCount(), columnCount(), getColumnMeta()
getAttribute(), setAttribute()
execute()
debugDumpParams()
<?php
try {
$dbh = new PDO('mysql:host=h;dbname=db',
$user, $pass) ;
$dbh = null ;
}
catch (PDOException $e) {
echo "Erreur: ".$e->getMessage()."<br/>" ;
die() ;
}
?>
<?php
try {
$dbh = new PDO('mysql:host=h;dbname=db',
$user, $pass) ;
$dbh->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$dbh = null ;
}
catch (PDOException $e) {
echo "Erreur: ".$e->getMessage()."<br/>" ;
die() ;
}
?>
22:29:56 Programmation Web 2013-2014 10
Gestion des erreurs : code d'erreur
<?php
$pdo = new PDO("mysql:host=localhost") ;
$pdostat = $pdo->query("COUCOU") ;
if ($pdo->errorCode()) {
echo "ERREUR !!\n" ; Code SQLSTATE
echo "<pre>\n" ;
var_dump($pdo->errorInfo()) ;
echo "</pre>\n" ; Code erreur spcifique
} du driver
?>
ERREUR !!
array(3) { Chane erreur
[0]=> string(5) "42000" spcifique au driver
[1]=> int(1064)
[2]=> string(47) "Erreur de syntaxe prs de 'COUCOU' la ligne 1"
}
<?php
try {
$pdo = new PDO("mysql:host=localhost") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION) ;
$pdostat = $pdo->query("COUCOU") ;
} Code erreur spcifique
du driver
catch (Exception $e) {
echo "ERREUR : ".$e->getMessage() ;
Code SQLSTATE Chane erreur
}
spcifique au driver
?>
ERREUR : SQLSTATE[42000]: Syntax error or access violation: 1064
Erreur de syntaxe prs de 'COUCOU' la ligne 1
<?php
try {
$pdo = new PDO("mysql:host=localhost") ;
$pdostat = $pdo->query("SELECT * FROM clients") ;
}
catch (Exception $e) {
echo "ERREUR : ".$e->getMessage() ;
}
?>
22:30:07 Programmation Web 2013-2014 13
Exploitation des rsultats d'une requte
try {
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->query("SELECT * FROM user") ;
$pdostat->setFetchMode(PDO::FETCH_ASSOC) ;
foreach ($pdostat as $ligne) {
echo implode(';', $ligne)."<br>\n" ;
}
}
catch (Exception $e) {
echo "ERREUR : ".$e->getMessage() ;
}
try {
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->query("SELECT * FROM user") ;
foreach ($pdostat->fetchAll(PDO::FETCH_ASSOC)
as $ligne) {
echo implode(';', $ligne)."<br>\n" ;
}
}
catch (Exception $e) {
echo "ERREUR : ".$e->getMessage() ;
}
try {
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->query("SELECT * FROM user") ;
while ($ligne
= $pdostat->fetch(PDO::FETCH_ASSOC)) {
echo implode(';', $ligne)."<br>\n" ;
}
}
catch (Exception $e) {
echo "ERREUR : ".$e->getMessage() ;
}
PDO::FETCH_ASSOC
retourner chaque ligne dans un tableau index par les
noms des colonnes comme elles sont retournes
dans le jeu de rsultats correspondant. Si le jeu de
rsultats contient de multiples colonnes avec le
mme nom, PDO::FETCH_ASSOC retourne une
seule valeur par nom de colonne.
PDO::FETCH_NUM
retourner chaque ligne dans un tableau index par le
numro des colonnes comme elles sont retournes
dans le jeu de rsultats correspondant, en
commenant 0.
PDO::FETCH_BOTH
retourner chaque ligne dans un tableau index par les
noms des colonnes ainsi que leurs numros, comme
elles sont retournes dans le jeu de rsultats
correspondant, en commenant 0.
PDO::FETCH_OBJ
retourner chaque ligne dans un objet avec les noms
de proprits correspondant aux noms des colonnes
comme elles sont retournes dans le jeu de rsultats.
PDO::FETCH_BOUND
retourner true et assigner les valeurs des colonnes
du jeu de rsultats dans les variables PHP auxquelles
elles sont lies avec la mthode
PDOStatement::bindParam() ou la mthode
PDOStatement::bindColumn().
PDO::FETCH_CLASS |
PDO::FETCH_CLASSTYPE
retourner une nouvelle instance de la classe
demande, liant les colonnes aux proprits
nommes dans la classe.
Nom de la classe = 1re colonne.
22:30:33 Programmation Web 2013-2014 20
Modes de rcupration des donnes (4)
PDO::FETCH_INTO
met jour une instance existante de la classe
demande, liant les colonnes du jeu de rsultats aux
noms des proprits de la classe.
PDO::FETCH_LAZY
retourner chaque ligne en tant qu'objet avec les noms
des attributs correspondant aux noms des colonnes
retournes dans le jeu de rsultats.
PDO::FETCH_LAZY cre les noms des attributs de
l'objet comme ils sont rencontrs.
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdostat = $pdo->prepare(
"SELECT * FROM user WHERE User= ?") ;
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->prepare(
"SELECT * FROM user WHERE User= ?") ;
$pdostat->bindValue(1, 'root') ;
$pdostat->execute() ; paramtre anonyme
// Utilisation du rsultat
$pdostat->bindValue(1, 'cutrona') ;
$pdostat->execute() ;
// Utilisation du rsultat
Association
Prparation
Association d'une valeur
Excution
d'une valeur
delalarequte
de au
requte
au 1er paramtre
1er paramtre
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->prepare(
"SELECT * FROM user WHERE User= :utilisateur") ;
$pdostat->bindValue(':utilisateur', 'root') ;
$pdostat->execute() ; paramtre nomm
// Utilisation du rsultat
$pdostat->bindValue(':utilisateur', 'cutrona') ;
$pdostat->execute() ;
// Utilisation du rsultat
Association
Prparation
Excution
d'une valeur
de
dela
au
larequte
requte
paramtre nomm
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->prepare(
"SELECT * FROM user WHERE User= ?") ;
$pdostat->execute(array('root')) ;
// Utilisation du rsultat paramtre anonyme
$pdostat->execute(array('cutrona')) ;
// Utilisation du rsultat
Association
Association
Prparation
Excution
d'une
d'une valeur
valeur
de
delalaau
requte
au
requte
1er
1er paramtre
paramtre
$pdo=new PDO("mysql:host=localhost;dbname=mysql") ;
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdostat = $pdo->prepare(
"SELECT * FROM user WHERE User= :utilisateur") ;
$pdostat->execute(
paramtre
array(':utilisateur' => 'root'nomm
)) ;
// Utilisation du rsultat
$pdostat->execute(
array(':utilisateur' => 'cutrona')) ;
// Utilisation du rsultat
Association
Prparation
Excution
d'une valeur
de
dela
au
larequte
requte
paramtre nomm
Saisie de l'utilisateur :
mail : whatever
pass : who_cares?
URL :
?mail=whatever&passwd=who_cares?
Requte:
SELECT *
FROM membre
WHERE mail='whatever'
AND passwd='who_cares?'
Dsol...
Saisie de l'utilisateur :
mail : whatever
pass : who_cares?' OR true!='
URL :
?mail=whatever&passwd=who_cares?'%20OR%20true!='
Requte:
SELECT *
FROM membre
WHERE mail='whatever'
AND passwd='who_cares?' OR true!=''
Bienvenue John
Transactions :
Atomicit, Consistance, Isolation et Durabilit
BEGIN puis COMMIT ou ROLLBACK
Mode PDO par dfaut :
Chaque requte est valide automatiquement
PDO::beginTransaction()
PDO::commit()
PDO::rollBack()
Tous les moteurs ne supportent pas les
transactions PDOException
22:31:34 Programmation Web 2013-2014 37