Académique Documents
Professionnel Documents
Culture Documents
Les SGBD
Des programmes qui se chargent du stockage de
vos données
MySQL : libre et gratuit, c'est probablement le
SGBD le plus connu.
PostgreSQL : libre et gratuit comme MySQL, avec
plus de fonctionnalités mais un peu moins connu ;
SQLite: libre et gratuit, très léger mais très
limité en fonctionnalités ;
Oracle : utilisé par les très grosses
entreprises ; sans aucun doute un des SGBD les plus
complets, mais il n'est pas libre et on le paie le
plus souvent très cher ;
Microsoft SQL Server : le SGBD de Microsoft.
2 sourour.ammar@gmail.com 2015-2016
Comment communiquer avec MySQL ?
Utiliser le langage SQL (standard)
Utiliser PHP qui fait la jonction entre
l’utilisateur et MySQL
3 sourour.ammar@gmail.com 2015-2016
PHPMyAdmin
un des outils les plus connus permettant de
manipuler une base de données MySQL
phpMyAdmin est livré avec WAMP
4 sourour.ammar@gmail.com 2015-2016
Comment se connecte-t-on à la base de
données en PHP ?
PHP propose plusieurs moyens de se connecter à une
base de données MySQL.
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.
5 sourour.ammar@gmail.com 2015-2016
6 sourour.ammar@gmail.com 2015-2016
Connexion à MySQL avec PDO
<?php
// Sous WAMP (Windows)
$bdd = new PDO('mysql:host=localhost;dbname=test;
charset=utf8', 'root', '');
?>
7 sourour.ammar@gmail.com 2015-2016
9 sourour.ammar@gmail.com 2015-2016
Interrogation :SELECT
<?php
$reponse = $bdd->query('SELECT * FROM
jeux_video');
?>
10 sourour.ammar@gmail.com 2015-2016
Interrogation
<?php
$donnees = $reponse->fetch();
?>
11 sourour.ammar@gmail.com 2015-2016
Exemple :
<?php
// On récupère le nom et le prix de la table jeux_video
$reponse = $bdd->query('SELECT nom, prix FROM jeux_video LIMIT
0,10');
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{ $reponse->fetch(PDO::FETCH_ASSOC)
?> $reponse->fetch(PDO::FETCH_NUM)
<p>
<strong>Jeu</strong> : <?php echo $donnees['nom']; ?><br />
Prix : <?php echo $donnees['prix']; ?> euros !<br />
</p>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
12 sourour.ammar@gmail.com 2015-2016
Exemple : methode 2
<?php
// On affiche chaque entrée une à une
foreach ($bdd->query('SELECT nom, prix FROM jeux_video LIMIT
0,10') as $donnees )
{
?>
<p>
<strong>Jeu</strong> : <?php echo $donnees['nom']; ?><br
/>
Prix : <?php echo $donnees['prix']; ?> euros !<br />
</p>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la
requête
?>
13 sourour.ammar@gmail.com 2015-2016
14 sourour.ammar@gmail.com 2015-2016
Fermeture du curseur
15 sourour.ammar@gmail.com 2015-2016
Exemple :
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8',
'root', '');
}
catch(Exception $e)
{ echo 'Erreur : '.$e->getMessage(); }
$reponse->closeCursor();
?>
16 sourour.ammar@gmail.com 2015-2016
Construire des requêtes en fonction de
variables : requêtes préparées
Solution 1 : utilisation de marqueurs « ? »
<?php
$req = $bdd->prepare('SELECT nom FROM jeux_video WHERE
possesseur = ?');
$req->execute(array($_GET['possesseur']));
?>
<?php
$req = $bdd->prepare('SELECT nom FROM jeux_video WHERE
possesseur = ? AND prix <= ?');
$req->execute(array($_GET['possesseur'],
$_GET['prix_max']));
?>
17 sourour.ammar@gmail.com 2015-2016
<?php
$req = $bdd->prepare('SELECT nom, prix FROM
jeux_video WHERE possesseur = :possesseur AND prix
<= :prixmax');
$req->execute(array(
'possesseur'=>$_GET['possesseur'],
'prixmax'=>$_GET['prix_max']));
?>
18 sourour.ammar@gmail.com 2015-2016
INSERT, UPDATE, DELETE
au lieu de faire appel à query() on va
utiliser exec() qui est prévue pour exécuter
des modifications sur la base de données
19 sourour.ammar@gmail.com 2015-2016
$req->execute(array(
'nom' => $nom,
'possesseur' => $possesseur,
'console' => $console,
'prix' => $prix,
'nbre_joueurs_max' => $nbre_joueurs_max,
'commentaires' => $commentaires
));
?>
20 sourour.ammar@gmail.com 2015-2016
INSERT, UPDATE, DELETE
<?php
$nb_modifs = $bdd->exec('UPDATE jeux_video SET prix = 10,
nbre_joueurs_max = 32 WHERE nom = \'Battlefield 1942\'');
?>
<?php
$req = $bdd->prepare('UPDATE jeux_video SET prix = :nvprix,
nbre_joueurs_max = :nv_nb_joueurs WHERE nom = :nom_jeu');
$req->execute(array(
'nvprix' => $nvprix,
'nv_nb_joueurs' => $nv_nb_joueurs,
'nom_jeu' => $nom_jeu
));
?>
21 sourour.ammar@gmail.com 2015-2016
<?php
$req = $bdd->prepare(‘DELETE FROM jeux_video WHERE
nom = :nom_jeu');
$req->execute(array(
'nom_jeu' => $nom_jeu
));
?>
22 sourour.ammar@gmail.com 2015-2016
Les transactions
try { // Début de transaction
$db->beginTransaction();
// Requêtes
$db->exec($query1);
$db->exec($query2);
$db->exec($query3);
// Validation
$db->commit();
} catch(PDOException $ex) {
// Un problème : on annule la transaction
$db->rollBack();
echo $ex->getMessage(); }
23 sourour.ammar@gmail.com 2015-2016
Exemple 1 :
Base de données : test
Table : jeux_videos
24 sourour.ammar@gmail.com 2015-2016
Exemple 2 :
Base de données : test
Table : jeux_videos
25 sourour.ammar@gmail.com 2015-2016
Exemple 2 :
Login.php verif_login.php
<html> <body> <?php
<form action="verif_login.php" //connexion à la base de données ....
method="post"> $login = $_POST['login']; $pwd =
<fieldset> $_POST['pwd'];
$reponse = $bdd->prepare('SELECT login,
<strong> Login : </strong> pwd FROM identifiants WHERE login=
<input type="text" name="login" ?');
/> <br/><br/> $reponse->execute(array($login));
<strong> Mot de passe : </strong> if($reponse->rowCount()>0){
<input type="password" name="pwd" $donnees = $reponse->fetch();
/> if($donnees['login']==$login &&
<br/><br/> $donnees['pwd'] == $pwd)
<input type="submit" value="se echo 'Bravo! connexion avec succes
!';
connecter">
else
</form> </fieldset>
echo "mot de passe incorrect !!! ";
} else echo "identifiant inconnu";
$reponse->closeCursor();
?>
26 sourour.ammar@gmail.com 2015-2016