Vous êtes sur la page 1sur 37

ESGIC BAMAKO 2016-2017

PHP
Module4
Chargé de cours:
Dr Yacouba GOÏTA
Tél : 72.21.09.60
Email : goita_yacouba@yahoo.fr
Références du cours
1. "Concevez votre site web avec PHP et
MySQL" du même auteur, en vente sur
le Site du Zéro, en librairie et dans les
boutiques en ligne.

2. www.openclassrooms.com

09/02/2017 2
Objectif du cours

• Concevoir une interface web avec PHP et MySQL

09/02/2017 3
SOMMAIRE DU MODULE 3

Connexion
Comment se connecte-t-on à la base
de données en PHP ?
• Pour pouvoir travailler avec la base de données en PHP, il
faut d'abord s'y connecter.
• PHP propose plusieurs moyens de se connecter à une
base de données MySQL

09/02/2017 5
• L'extension mysql_ : ce sont des fonctions qui permettent
d'accéder à une base de données MySQL et donc de
communiquer avec MySQL. Leur nom commence toujours par
mysql_. Toutefois, ces fonctions sont vieilles et on
recommande de ne plus les utiliser aujourd'hui.
• L'extension mysqli_ : ce sont des fonctions améliorées d'accès à
MySQL. Elles proposent plus de fonctionnalités et sont plus à jour.
• L'extension PDO : c'est un outil complet qui permet d'accéder à
n'importe quel type de base de données. On peut donc l'utiliser
pour se connecter aussi bien à MySQL que PostgreSQL ou Oracle.

09/02/2017 6
Lequel choisir ?

• Nous allons ici utiliser PDO car c'est cette méthode


d'accès aux bases de données qui va devenir la plus
utilisée dans les prochaines versions de PHP.
• D'autre part, le gros avantage de PDO est que vous
pouvez l'utiliser de la même manière pour vous connecter
à n'importe quel autre type de base de données
(PostgreSQL, Oracle…)

09/02/2017 7
09/02/2017 8
Activer PDO
• Normalement, PDO est activé par défaut. Pour le vérifier (voir la figure suivante), faites un
clic gauche sur l'icône de WAMP dans la barre des tâches, puis allez dans le menu PHP /
Extensions PHP et vérifiez que php_pdo_mysql est bien coché.

09/02/2017 9
Se connecter à MySQL avec PDO

• Code : PHP
<?php
$bdd = new PDO( ' mysql: host=localhost; dbname=test'
, ' root' , ' ' ) ;
?>

09/02/2017 10
Tester la présence d'erreurs
• Code : PHP
<?php
try
{
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root' , ' ' ) ;
}
catch ( Exception $e)
{
die( ' Erreur : ' . $e->getMessage( ) ) ;
}
?>
09/02/2017 11
Récupérer les données

• Pour travailler ici, il nous faut une base de données «


toute prête » qui va nous servir de support.
• Pour cela nous allons utiliser une table appélé
« jeux_video »

09/02/2017 12
Faire une requête

• $reponse = $bdd->query( ' Tapez votre requête SQL ici' )


;
• Code : PHP
<?php
$reponse = $bdd->query( ' SELECT * FROM jeux_video' )
;
?>

09/02/2017 13
Afficher le résultat d'une requête

• Code : PHP
<?php
$donnees = $reponse->fetch( ) ;
?>
• fetch en anglais signifie « va chercher ».
• Dans ce code, $donnees est un array qui contient champ
par champ les valeurs de la première entrée.

09/02/2017 14
• Le fetch renvoie faux (false) dans $donnees lorsqu'il est
arrivé à la fin des données.
• à la fin la de la ligne, on a :
• Code : PHP
<?php $reponse->closeCursor( ) ; ?>

09/02/2017 15
Afficher seulement le contenu de
quelques champs
Code : PHP
<?php
try
{
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root' , ' ' ) ;
}
catch( Exception $e)
{
die( ' Erreur : ' . $e->getMessage( ) ) ;
}
$reponse = $bdd->query( ' SELECT nom FROM j eux_video' ) ;
09/02/2017 16
• while ( $donnees = $reponse->fetch( ) )
{
echo $donnees[ ' nom' ] . ' <br />' ;
}
• $reponse->closeCursor( ) ;
?>

09/02/2017 17
Avec critères de sélection

• Exemple:
SELECT * FROM j eux_video WHERE possesseur=' Patrick‘
Voyons ce que ça donne:

09/02/2017 18
Code : PHP
<?php
try
{
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root' , ' ' ) ;
}
catch( Exception $e)
{
die( ' Erreur : ' . $e ->getMessage( ) ) ;
}
$reponse = $bdd->query( ' SELECT nom, possesseur FROM jeux_video WHERE
possesseur=\' Patrick\' ' ) ;

09/02/2017 19
while ( $donnees = $reponse->fetch( ) )
{
echo $donnees['nom'] .' appartient à ' .$donnees[ '
possesseur' ] .'<br />' ;
}
$reponse->closeCursor( ) ;
?>

09/02/2017 20
Autre exemple d’affichage
• <?php
try
{
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root' , ' ' ) ;
}
• catch( Exception $e)
{
die( ' Erreur : ' . $e->getMessage( ) ) ;
}

09/02/2017 21
$reponse = $bdd->query( ' SELECT nom FROM jeux_video LIMIT 0,
10' ) ;
echo '<p>Voici les 10 premières entrées de la table jeux_video
: </p>' ;
while ($donnees = $reponse->fetch( ) )
{
echo $donnees['nom'] . ' <br />' ;
}
$reponse->closeCursor( ) ;
?>

09/02/2017 22
les requêtes préparées

• Permettent d’adapter les requêtes en fonction de


variables :
• Avec des marqueurs « ? »
• on va « préparer » la requête sans sa partie variable, que
l'on représentera avec un marqueur sous forme
de point d'interrogation :

09/02/2017 23
• Code : PHP
<?php
$req = $bdd->prepare( ' SELECT nom FROM jeux_video
WHERE possesseur = ?' ) ;
?>
• Au lieu d'exécuter la requête avec query( ) comme la
dernière fois, on appelle ici prepare( ) .

09/02/2017 24
• La requête est alors prête, sans sa partie variable.
Maintenant, nous allons exécuter la requête en appelant
execute et en lui transmettant la liste des paramètres :
• Code : PHP
<?php
$req = $bdd->prepare( ' SELECT nom FROM jeux_video WHERE possesseur
=?' ) ;
$req->execute( array( $_GET[ ' possesseur' ] ) ) ;
?>
• La requête est alors exécutée à l'aide des paramètres que
l'on a indiqués sous forme d'array.

09/02/2017 25
• S'il y a plusieurs marqueurs, il faut indiquer les
paramètres dans le bon ordre :
• Code : PHP
<?php
$req = $bdd->prepare( ' SELECT nom FROM jeux_video WHERE possesseur
=AND prix <= ?' ) ;
$req->execute( array( $_GET[ ' possesseur' ] , $_GET[ ' prix_max' ] ) ) ;
?>

09/02/2017 26
• Le premier point d'interrogation de la requête sera
remplacé par le contenu de la variable $_GET[ '
possesseur' ] , et le second par le contenu de $_GET[ '
prix_max' ] .
• Exemple:
construire une page capable de lister les jeux appartenant à
une personne et dont le prix ne dépasse pas une certaine
somme :
09/02/2017 27
• Code : PHP
<?php
try
{
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root'
,'');
}
catch( Exception $e)
{
die( ' Erreur : ' . $e->getMessage( ) ) ;
}

09/02/2017 28
• $req = $bdd->prepare( ' SELECT nom, prix FROM
jeux_video WHERE
possesseur = ? AND prix <= ? ORDER BY prix' ) ;
$req->execute( array( $_GET[ ' possesseur' ] , $_GET[ '
prix_max' ] ) ) ;

09/02/2017 29
echo ' <ul>' ;
while ( $donnees = $req->fetch( ) )
{
echo ' <li>' . $donnees['nom' ] . ' ( ' . $donnees[ ' prix' ] . '
EUR) </li>' ;
}
echo ' </ul>' ;
$req->closeCursor( ) ;
?>

09/02/2017 30
Traquer les erreurs

• Ajoutez-y un paramètre à la fin pour activer les erreurs :


Code : PHP
<?php
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root' , ' ' ,
array( PDO: : ATTR_ERRMODE => PDO: : ERRMODE_EXCEPTION) ) ;
?>

09/02/2017 31
Écrire des données

• INSERT : ajouter des données


• La requête INSERT INTO permet d'ajouter une
entrée
• Code : PHP
INSERT INTO jeux_video( ID, nom, possesseur, console, prix,
nbre_joueurs_max, commentaires) VALUES( ' ' , ' Battlefield 1942'
, Patrick' , ' PC' , 45, 50, ' 2nde guerre mondiale' )

09/02/2017 32
Application en PHP
• Code : PHP
<?php
try
{
$bdd = new PDO( ' mysql: host=localhost; dbname=test' , ' root' , ' ' ) ;
}
catch( Exception $e)
{
die( ' Erreur : ' . $e->getMessage( ) ) ;
}

09/02/2017 33
• // On ajoute une entrée dans la table jeux_video
$bdd->exec( ' INSERT INTO jeux_video( nom, possesseur,
console, prix, nbre_joueurs_max, commentaires) VALUES( \'
Battlefield 1942\' , \' Patrick\' , \' PC\' , 45, 50, \' 2nde guerre
mondiale\' ) ' ) ;
echo ' Le jeu a bien été ajouté ! ' ;
?>

09/02/2017 34
UPDATE : modifier des données

• Code : PHP
UPDATE jeux_video SET prix = 10, nbre_joueurs_max =
32 WHERE ID = 51

09/02/2017 35
Application en PHP

• De la même manière, en PHP on fait appel à exec( ) pour


effectuer des modifications :
• Code : PHP
<?php
$bdd->exec( ' UPDATE jeux_video SET prix = 10,
nbre_joueurs_max = 32
WHERE nom = \' Battlefield 1942\' ' ) ;
?>
09/02/2017 36
Avec une requête préparée
• Code : PHP
<?php
$req = $bdd->prepare( ' UPDATE j eux_video SET prix = : nvprix,
nbre_joueurs_max = : nv_nb_joueurs WHERE nom = : nom_jeu' ) ;
$req->execute( array(
' nvprix' => $nvprix,
' nv_nb_joueurs' => $nv_nb_j oueurs,
' nom_jeu' => $nom_jeu
));
?>

09/02/2017 37