SlideShare une entreprise Scribd logo
1
PHP 5
La base de données
MySql
2
Base de
données
 C’est quoi une base de données ?
– Une base de données contient une ou plusieurs
tables, chaque table ayant un ou plusieurs
enregistrements
 Exemple de table :
3
Base de
données
 La gestion de la base
– est rendue possible grâce à un Système de Gestion de Base
de Données (S.G.B.D)
– Il a pour rôle de :
• manipuler, compléter, mettre à jour les données dans
les tables
• et de pouvoir les interroger via des requêtes, par le
langage SQL (Structured Query Language : Langage de
requêtes structurées)
– Il existe plusieurs S.G.B.D., certains gratuits, d'autres
payants : pour les gratuits, on trouve MySQL
Base de
données
 Les champs d’une table de base de données
– correspondent à une des variables qui composent
un enregistrement, par exemple "PRENOM"
– sont caractérisés par une nature, ils permettent, pour
certains, d'identifier avec précision une valeur ou un
groupe de valeurs
– le champ peut être de plusieurs types, pour les 3
principaux :
• texte, valeur numérique ou valeur binaire
Base de
données
 Les champs d’une table de base de données
– Champ numérique
• Int : de -2 147 483 648 à 2 147 483 647
• En mettant l'attribut UNSIGNED, on stocke de 0 à 4
294 967 295 (on ne se préoccupe plus du signe avec
le paramètre UNSIGNED)
• Il existe INT, TINYINT, BIGINT, DOUBLE qui
peuvent contenir des nombres plus ou moins
grands
• Pour les réels : FLOAT
Base de
données
– Champ texte
• VARCHAR pour stocker au plus 255 caractères
• TEXT peut stocker 65535 caractères
• LONGTEXT : 4 294 967 295 (2^32 -1) caractères...
• ENUM : présente une énumération. Par exemple,
ENUM('rouge', 'bleu', 'vert') assurera que la valeur
du champ sera l'une des 3 de la liste
– Champs de type date et heure
• DATE permet d'effectuer des opérations sur les
dates dans les requêtes, plutôt que de stocker la
date sous forme de texte
– Autres types de champs
• On peut stocker des images, ou encore des fichiers
complets dans une base de données : en les
encodant dans un champ de type BLOB (binaire)
par exemple
Base de
données
– Clé primaire (Primary Key)
• La clé primaire est une propriété d'un des champs
pour différencier des enregistrements identiques
• Exemple d’ambiguïté :
• Pour distinguer les deux enregistrements de
"Benjamin", on attribue un numéro à chaque individu,
généralement appelé "identifiant" et abrégé sous la
forme "id" (ou "ID")
 Cet identifiant sera "auto incrémenté"
Base de
données
– La solution
– Attention
• Toutes les valeurs des clés doivent être uniques : il
ne doit pas, pour une même table, y avoir 2 valeurs
égales de clés primaires
• On peut demander à voir le contact dont l'ID est 2
ou 3, on a bien 2 personnes distinctes
Base de
données
– Clé étrangère (Foreign Key)
• La clé étrangère est un champ dans une table qui est
clé primaire dans une autre table
• Pour l’exemple, on peut très bien spécifier que
ID_PAYS est une clé étrangère liée au champ ID de la
table pays
• L'existence d'une clé étrangère dans les S.G.B.D.R.
permet de mettre à jour des enregistrements en
cascade, par exemple, supposons que j'efface le pays
"France", je dois supprimer tous les contacts qui y
vivent (puisqu'ils ne seront alors rattachés à aucun
pays)
MySQL
 Administration de MySqQL
– L’administration peut se faire de deux manières
• par PHP (voir plus loin)
• Manuellement, par l’interface
phpMyAdmin d’EasyPhp
– L’interface phpMyAdmin
• Pour y accéder :
 Cliquer sur le bouton droit de la souris en le
mettant sur le symbole d’Easyphp puis
appuyer sur Administration
 Ensuite, appuyer sur mysql Administration
MySQL
 On
obtient
Les bases
existantes
La base mysql
et ses tables
Informations générales sur
le gestionnaire
phpMyAdmin
MySQL
 En cliquant sur Databases : on obtient les bases
enregistrées
– On peut cocher et supprimer une base par Drop
– On peut créer une nouvelle base
MySQL
 En cliquant sur la base mySql, on obtient ses
tables
– On peut supprimer une table en cochant et
supprimant
– On peut créer une nouvelle table
MySQL
 Retour sur la création d’une base : 2
méthodes
Base de
données
 Création d’une base personnelle
– Commençons par créer une base de données : ma-
base
• Laissez le type en Interclassement par défaut
• ma-base(0) indique que la base contient 0 table
• Regardez le code SQL qui s’affiche
Création d’une base
personnelle
 Création d’une table
– Créer dans ma-base, la table « contacts » suivante avec ses 5
champs:
– Cette action conduit à afficher le premier enregistrement de la
table contacts avec les 5 champs en attente
Table MySql
 Les champs
– Le nom du champ
• ne peut pas être nul, ni comporter de caractères accentués, espaces, -,
.... par contre, il accepte _
– Le type de champ est sélectionné dans une liste de choix
• pour l'instant, sélectionner VARCHAR qui correspond à du texte
– La taille/valeurs
• permet de déterminer la taille max des données à rentrer dans les
champs
– Interclassement
• représente le jeu de caractères par défaut si vous ne sélectionnez
rien (préférable)
• sinon sélectionner Latin1_swedish_ci. Si le jeu de caractères n'est
pas démarré dans phpMyAdmin, une erreur est produite
– L'attribut peut-être rien, unsigned ou Unsigned zerofill
• les 2 dernières valeurs s'utilisent uniquement pour des types de
champs spéciaux
– Null permet de dire si le champ peut-être null (vide) ou non
– Default permet de donner une valeur par défaut au champ
Table MySql
 Les options
– permet de déterminer si le champ est ou non une clé primaire
• dans ce cas, la valeur du champ sera unique dans la table
• aucun enregistrement n'aura la même valeur dans ce champ
– index indique que le champ peut être utilisé comme une
valeur de repérage (index)
• permet d'augmenter les vitesses de traitement (tri) dans la
table
• la clé primaire est également un index
– unique permet de spécifier que le contenu est unique dans
l'ensemble du champ
• évite les doublons
– permettent d'indexer des textes complets
• cette possibilité ralentit la table pour de longs champs
Table MySql
 Création de champs
– Créez 5 champs de type VARCHAR (caractères de taille
variables)
• code, de taille 10, non null et unique
• titre, de taille 30, non null et unique
– N'oubliez pas de sauvegarder la table
Remplissage du premier
enregistrement
2
 On
obtient
Pour modifier,
supprimer un
ou tous les
champs
Pour ajouter
un champ
Table MySql
 Ajout d’enregistrement :
insert
Table MySql
 Appuyer sur Browse pour voir les
enregistrements
Commandes
SQL
 Création de table
CREATE TABLE
– Syntaxe
CREATE table nomdetable(
nomattribut1 type[not null]
[AUTO_INCREMENT] nomattribut2 type[not
null]
…
nomattributN type[not null]
…
primary key (nomattribut1,...,nomattributN)
;
– Auto_increment : l'entier sera augmenté de 1 à
chaque nouvelle insertion
Commandes
SQL
 Création de table : appuyer sur SQL et rentrer ce
code
Commandes
SQL
 Modification de la table
– Une fois créée, on peut la modifier en utilisant ALTER TABLE
et ADD
– on peut la modifier en utilisant ALTER TABLE et
DROP
Commandes
SQL
 D’ailleurs, en voulant supprimer directement le
champ, en cliquant sur la croix, voici ce qui
s’affiche :
Commandes
SQL
 Modification de la table
– On peut la supprimer totalement
par :
• DROP TABLE clients_tbl
Commandes
SQL
 Insertion d’enregistrements
– INSERT INTO
clients_tbl(id,prenom,nom,ne_le,ville,enfan
ts)
VALUES('','Patrick','Martin','1965-10-
08','Bordeaux','2')
L’enregistremen
t
La requête d’affichage une
fois l’insertion faite
Devient
visible
Commandes
SQL
 Insertion d’enregistrements : de manière générale
– Syntaxe
• INSERT INTO votre_table (nomattribut1,...,nomattributN)
values ('valeur1',...,'valeurN');
– Les attributs qui ne sont pas mentionnés prendront leur valeur
par défaut
– Exemple
Soit la table Client-tbl (Id,nom,prenom,adresse) créée par :
create table Client (id tinyint(3) unsigned not null
AUTO_INCREMENT, nom varchar(10) not null default ' ', prenom
varchar(10) not null default ' ', adresse varchar(50) not null
default ' ', primary key (id));
Commandes
SQL
 Insertion d’enregistrements : de manière
générale
– Remarque
• La clef ID possède l'option auto_increment, les
ID vont ainsi être créés automatiquement
• En théorie, les numéros d'ID s'incrémentent par
ordre croissant, mais si vous supprimez un
enregistrement, la prochaine insertion d'un
enregistrement se fera sur l'ID de
l'enregistrement auparavant supprimé
• Complétez la table ainsi :
Commandes
SQL
 Sélection d’information d’enregistrements
– affichez uniquement les personnes qui n'ont
que 2 enfants, la requête SQL sera :
SELECT * FROM clients_tbl WHERE
enfants=‘2’
– demander l'affichage que des noms et prénoms :
SELECT nom,prenom FROM clients_tbl WHERE
enfants='2'
Commandes
SQL
– Sélection combinée :
• SELECT * FROM clients_tbl WHERE enfants='1' OR
enfants='2' AND ville='Paris'
Commandes
SQL
– Autres formes de
sélection
Commandes
SQL
 La commande Update
– UPDATE clients_tbl SET prenom='Jacques' WHERE
id=1
– UPDATE clients_tbl SET prenom='Jean-Pierre',
nom='Papin', ville='Marseille', enfants=3 WHERE
id=1
Commandes
SQL
 La commande DELETE
DELETE FROM clients_tbl WHERE id=1
– supprime des enregistrements
Commandes
SQL
 Jointure de tables
– Soient les deux
tables :
Jointure de
tables
SELECT * FROM Livres, Genres WHERE
Livres.CodeGenre =
Genres.CodeGenre;
Jointure de
tables
SELECT Titre, Livres.CodeGenre, LibelleGenre, Prix
FROM Livres, Genres WHERE Livres.CodeGenre
= Genres.CodeGenre;
Utilisation avec
PHP
 Précautions
– Ne touchez pas au mot de passe,
– N’essayez pas de le changer
– Le mot de passe à utiliser est
"mysql"
 Dans php.ini, enlever les ;
avant :
extension=php_mysql.
dll php_pdo.dll
php_pdo_mysql.dll
Utilisation avec
PHP
 Utilisation de la classe PDO (PHP Data Object)
– Principale nouveauté de PHP
– C’est en quelque sorte un langage orienté objet
pour traiter les bases de données
– L’approche PDO permet d’étendre les fonctions
d’accès à la base facilement et de manière
transparente
Utilisation avec
PHP
 Utiliser votre base de données
– L’utilisation de la BD avec PHP se fait en 5 étapes
• Connexion
• Sélection de la BD
• Requête
• Exploitation des résultats
• Fermeture de la connexion
– Structure des classes de PDO
• PDO propose 3 classes
 PDO : lien à la BD
 PDOStatement : requêtes et leurs
résultats
 PDOException : pour la gestion des
erreurs
Utilisation avec
PHP
 Connexion au serveur de données
– La première étape consiste à déclarer les variables qui
vont permettre la connexion à la base de données (ce
sont les paramètres des fonctions de connexion à la
base)
– Ces variables sont :
• $user : le nom d'utilisateur
• $passwd : le mot de passe
• $host : l'hôte (ordinateur sur lequel le SGBD est installé)
• $bdd : le nom de la base de données
– La deuxième étape est de construire la DSN (Data
Source Name)
$dsn = 'mysql:host=localhost;dbname=ma-base';
– Enfin, la connexion se fait par la création d’un objet
de la classe PDO
• $dbh= new PDO($dsn, $user, $pass);
– Il ne faut pas oublier de fermer la base
• $dbh=null;
Utilisation avec
PHP
 connexion-PDO.php
<?php
$user = 'root';
$pass = 'mysql';
// Data Source Name
$dsn = 'mysql:host=localhost;dbname=ma-base';
try{ //tentative de connexion : on crée un objet de la classe
PDO
$dbh= new PDO($dsn, $user, $pass);
//S'il y a des erreurs de connexion, un objet PDOException
est
// lancé. Vous pouvez attraper cette exception si vous
voulez
// gérer cette erreur
} catch (PDOException $e){
print "Erreur ! :" . $e->getMessage() .
"<br/>"; die();
}
?>
Utilisation avec
PHP
 Effectuer une requête
– Une fois la connexion
ouverte, on va pouvoir
utiliser la BD pour lire,
modifier…
– Pour cela, on utilise
le langage SQL
 Pour envoyer une
requête au serveur
– On peut utiliser deux
méthodes de la classe
PDO
• query() pour la
sélection
• exec() pour la mise à
Utilisation avec
PHP
 Requête de sélection
– On utilise la méthode query()
– Les données ne sont pas affichées, elles sont mises
en mémoire
– Il faut donc aller les chercher et les afficher
– La méthode fetchAll() retourne l’ensemble des
données sous forme d’un tableau PHP et libère le
SGBD
– La méthode fetc() permet une lecture séquentielle
du résultat
– Le paramètre fetch_style détermine la façon dont
PDO retourne les résultats (format des résultats)
Utilisation avec
PHP
Effectuer une requête
 Exemple 0 :
– Créer une table : creation-table.php
<?php
//Inclusion du fichier contenant la connexion à la
base include_once('connexion-PDO.php');
//Création de la table personne
$sql="CREATE TABLE personne
( id_personne INTEGER PRIMARY KEY
, nom
VARCHAR( 20 ) NOT
NULL ,
prenom VARCHAR( 20 ) ,
depart INTEGER( 2 ))";
//création de la table sport
$sql="CREATE TABLE sport ( id_sport INTEGER PRIMARY KEY ,
design VARCHAR( 30 ) UNIQUE NOT NULL)";
$sth = $dbh->query($sql);
//création de la table pratique
$sql="CREATE TABLE pratique ( id_personne INTEGER NOT NULL,
id_sport INTEGER NOT NULL , niveau TINYINT, PRIMARY KEY
(id_personne,id_sport))";
$sth = $dbh->query($sql);
$dbh=NULL;
?>
Utilisation avec
PHP
Effectuer une requête
 Exemple 1 :
– Lire tous les enregistrements : lire-enregistrements.php
<?php
//Inclusion du fichier contenant la connexion à la
base include_once('connexion-PDO.php');
//La requête SQL
$sql = "SELECT * FROM `infos_tbl` LIMIT 0 , 30";
//Recherche des données
$sth = $dbh->query($sql);
// On voudrait les résultats sous la forme d’un
tableau associatif
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
//Affichage des résultats
foreach ($result as
$row){
echo $row['nom'];echo
'-';
echo $row['prenom'];echo '-';
echo $row['email'];echo
'<br/>';
}
Utilisation avec
PHP
Effectuer une
requête
 Base : ma-base
– Table : infos_tbl
– Résultats
Belaid-Abdel-abelaid@loria.fr
Maquin-Frédéric-Frederic.Maquin@loria.fr
Moinel-Thomas-thomas.Moinel@univ-nancy
2.fr
Belaid-Yolande-ybelaid@loria.fr
Ouwayed-Nazih-ouwayed@loria.fr
Utilisation avec
PHP
Effectuer une requête
 Exemple 2 : calculer le nombre
d’enregistrements
: nb-enregistrements.php
– Deux manières :
• Créer une requête spécifique en utilisant la
fonction count() de MySql
• Compter le nombre d’éléments contenus
dans le tableau renvoyé par la méthode
fetchAll()
<?php
include_once('connexion-PDO.php');
//1) En utilisant une requête particulière
$sql = "SELECT COUNT(*) as nbe FROM `infos_tbl` WHERE
nom='Belaid'";
$sth = $dbh->query($sql);
$result = $sth->fetchAll();
$nombre = $result[0]
['nbe']; echo $nombre;
echo "<br/>";
//2) En comptant le nombre d'éléments présents dans le
tableau des résultats
$sql = "SELECT nom, prenom FROM `infos_tbl` WHERE
nom='Belaid'";
$sth = $dbh->query($sql);
$result = $sth->fetchAll();
$nombre =
count($result); echo
$nombre;
$dbh=NULL;
?>
Utilisation avec
PHP
Effectuer une requête
 Requête d’insertion/modification
– On utilise la méthode exec() de la classe PDO
– Exemple : insertion-enreg.php
<?php
//Inclusion du fichier contenant la connexion à la
base include_once('connexion-PDO.php');
//Insertion d'un enregistrement
$sql = "INSERT INTO infos_tbl
(id,nom,prenom,email,icq,titre,url) VALUES ('',
'Ouwayed', 'Nazih', 'ouwayed@loria.fr', '' , 'Thésard',
'www.loria.fr')";
//Exécution de la requête
$dbh->exec($sql);
$dbh=NULL;
?>
– exec() retourne le nombre de lignes modifiées, 0 si
aucune et FALSE si erreur de requête
53
Utilisation avec
PHP
Effectuer une requête
 Gestion des erreurs
– Les erreurs sont stockées et consultables en faisant appel
aux méthodes errorCode() et errorInfo()
– Exemple : gestion-erreur-mod-sil.php
<?php
//Inclusion du fichier contenant la connexion à la
base include_once('connexion-PDO.php');
//Insertion d'un enregistrement
$sql = "";
if(!$dbh->exec($sql)){
echo $dbh->errorCode() .
"<br>"; echo $dbh-
>errorInfo(); print_r($info);
//$info[0]==$dbh->errrCode()
Code d'erreur unifié
//$info[1] Code d'erreur
spécifique au driver
//$info[0] message d'erreur
spécifique au driver
}
Utilisation avec
PHP
Effectuer une requête
 Gestion des erreurs
– Utiliser les exceptions : gestion-erreur-mod-excep.php
<?php
//Inclusion du fichier contenant la connexion à la
base include_once('connexion-PDO.php');
//On définit le handler d'erreur
$dbh->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
try {
$sql = "INSERT INTO infos_tbl VALUES ('', 'Ouwayed', 'Nazih',
'ouwayed@loria.fr', '' , 'Thésard', 'www.loria.fr')";
$dbh->exec($sql);
//si une erreur a eu lieu, une exception est lancée
}catch (PDOException $e){
print "Erreur ! :" . $e->getMessage() ; "<br/>";
}
$dbh=NULL;
?>
TD
 Énoncé
– On veut créer un site HTML qui contrôle la connexion
– Le contrôle se fait par l’affichage d’un formulaire
permettant de rentrer :
• Le nom d’identifiant
• Un mot de passe
– Le formulaire indique également si :
• on a oublié son mot de passe (et qu’on demande
de le retrouver)
 en indiquant son email
• on veut s’inscrire au site, dans ce cas, on demande
d’entrer
 son identifiant
 son de mot de passe
 une confirmation du mot de passe
 âge, sexe, profession, affiliation, ville, pays
• où âge, sexe et affiliation ne sont pas obligatoires
TD
 Énoncé (suite)
– Le contrôle :
• Un premier contrôle en local permet de valider ou
non la saisie des champs (vides, comportant ou non
des caractères spécifiques comme le @ pour le
email)
• Un contrôle plus poussé consiste à aller vérifier
dans la base de données "abonnés" (MySQl)
– L’inscription au site
• doit conduire au rangement de l’identifiant et du
mot de passe dans la base "abonnés"

Contenu connexe

Similaire à Ce cours est un tutoriel de programmation PHP en accéléré. (20)

PDF
Support formation vidéo : SQL pour les (grands) débutants
SmartnSkilled
 
PPTX
Access_Cours_complet.pptx pour debutés études profonds
MahRandriamitsiry
 
PDF
Tpdba1
infcom
 
PPT
Les commandes sql
Hanfi Akram
 
PDF
Le langage sql
Abderrahim Aitali
 
PDF
Le langage sql
Abderrahim Aitali
 
PPTX
analysez-des-donnees-avec-excel-240421061653-9ec0a2ce.pptx
MahRandriamitsiry
 
PDF
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
tepoha4848
 
PDF
resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
FootballLovers9
 
KEY
Redis - (nosqlfr meetup #2)
Frank Denis
 
PDF
Sql
krymo
 
PDF
Cours Big Data Chap6
Amal Abid
 
PDF
Cours_initiation_SPSS (1). Pratiques pdf
koffiayamichle
 
PDF
Cours doumi spss 2013 2014
tsuhel
 
PDF
Chapitre5.pdf
Moez Moezm
 
PDF
Plsql
rchbeir
 
PPTX
basededonneepourcomjjihmmkhhyfdfvgh.pptx
ranimbelfekih1
 
PPTX
Administration des bases de données Licence 2
etsdigitol
 
PPTX
Base donnee MYSQL
saberf accouze
 
PPT
2_8_Cours_Plsql.ppt
RihabBENLAMINE
 
Support formation vidéo : SQL pour les (grands) débutants
SmartnSkilled
 
Access_Cours_complet.pptx pour debutés études profonds
MahRandriamitsiry
 
Tpdba1
infcom
 
Les commandes sql
Hanfi Akram
 
Le langage sql
Abderrahim Aitali
 
Le langage sql
Abderrahim Aitali
 
analysez-des-donnees-avec-excel-240421061653-9ec0a2ce.pptx
MahRandriamitsiry
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
tepoha4848
 
resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
FootballLovers9
 
Redis - (nosqlfr meetup #2)
Frank Denis
 
Sql
krymo
 
Cours Big Data Chap6
Amal Abid
 
Cours_initiation_SPSS (1). Pratiques pdf
koffiayamichle
 
Cours doumi spss 2013 2014
tsuhel
 
Chapitre5.pdf
Moez Moezm
 
Plsql
rchbeir
 
basededonneepourcomjjihmmkhhyfdfvgh.pptx
ranimbelfekih1
 
Administration des bases de données Licence 2
etsdigitol
 
Base donnee MYSQL
saberf accouze
 
2_8_Cours_Plsql.ppt
RihabBENLAMINE
 

Plus de med_univ78 (7)

PPTX
Ce cours est un ensemble d'exercices sur les dépendances fonctionnelles
med_univ78
 
PPTX
Gérard Rozsavolgyi, aide de Sylvain Austruy
med_univ78
 
PDF
BilliauwsBonjean.pdf
med_univ78
 
PDF
Introduction_Android_-_Complet.pdf
med_univ78
 
PDF
Tackling_Android_Stego_Apps_in_the_Wild.pdf
med_univ78
 
PDF
android.pdf
med_univ78
 
PDF
cours-android.pdf
med_univ78
 
Ce cours est un ensemble d'exercices sur les dépendances fonctionnelles
med_univ78
 
Gérard Rozsavolgyi, aide de Sylvain Austruy
med_univ78
 
BilliauwsBonjean.pdf
med_univ78
 
Introduction_Android_-_Complet.pdf
med_univ78
 
Tackling_Android_Stego_Apps_in_the_Wild.pdf
med_univ78
 
android.pdf
med_univ78
 
cours-android.pdf
med_univ78
 
Publicité

Ce cours est un tutoriel de programmation PHP en accéléré.

  • 1. 1 PHP 5 La base de données MySql
  • 2. 2 Base de données  C’est quoi une base de données ? – Une base de données contient une ou plusieurs tables, chaque table ayant un ou plusieurs enregistrements  Exemple de table :
  • 3. 3 Base de données  La gestion de la base – est rendue possible grâce à un Système de Gestion de Base de Données (S.G.B.D) – Il a pour rôle de : • manipuler, compléter, mettre à jour les données dans les tables • et de pouvoir les interroger via des requêtes, par le langage SQL (Structured Query Language : Langage de requêtes structurées) – Il existe plusieurs S.G.B.D., certains gratuits, d'autres payants : pour les gratuits, on trouve MySQL
  • 4. Base de données  Les champs d’une table de base de données – correspondent à une des variables qui composent un enregistrement, par exemple "PRENOM" – sont caractérisés par une nature, ils permettent, pour certains, d'identifier avec précision une valeur ou un groupe de valeurs – le champ peut être de plusieurs types, pour les 3 principaux : • texte, valeur numérique ou valeur binaire
  • 5. Base de données  Les champs d’une table de base de données – Champ numérique • Int : de -2 147 483 648 à 2 147 483 647 • En mettant l'attribut UNSIGNED, on stocke de 0 à 4 294 967 295 (on ne se préoccupe plus du signe avec le paramètre UNSIGNED) • Il existe INT, TINYINT, BIGINT, DOUBLE qui peuvent contenir des nombres plus ou moins grands • Pour les réels : FLOAT
  • 6. Base de données – Champ texte • VARCHAR pour stocker au plus 255 caractères • TEXT peut stocker 65535 caractères • LONGTEXT : 4 294 967 295 (2^32 -1) caractères... • ENUM : présente une énumération. Par exemple, ENUM('rouge', 'bleu', 'vert') assurera que la valeur du champ sera l'une des 3 de la liste – Champs de type date et heure • DATE permet d'effectuer des opérations sur les dates dans les requêtes, plutôt que de stocker la date sous forme de texte – Autres types de champs • On peut stocker des images, ou encore des fichiers complets dans une base de données : en les encodant dans un champ de type BLOB (binaire) par exemple
  • 7. Base de données – Clé primaire (Primary Key) • La clé primaire est une propriété d'un des champs pour différencier des enregistrements identiques • Exemple d’ambiguïté : • Pour distinguer les deux enregistrements de "Benjamin", on attribue un numéro à chaque individu, généralement appelé "identifiant" et abrégé sous la forme "id" (ou "ID")  Cet identifiant sera "auto incrémenté"
  • 8. Base de données – La solution – Attention • Toutes les valeurs des clés doivent être uniques : il ne doit pas, pour une même table, y avoir 2 valeurs égales de clés primaires • On peut demander à voir le contact dont l'ID est 2 ou 3, on a bien 2 personnes distinctes
  • 9. Base de données – Clé étrangère (Foreign Key) • La clé étrangère est un champ dans une table qui est clé primaire dans une autre table • Pour l’exemple, on peut très bien spécifier que ID_PAYS est une clé étrangère liée au champ ID de la table pays • L'existence d'une clé étrangère dans les S.G.B.D.R. permet de mettre à jour des enregistrements en cascade, par exemple, supposons que j'efface le pays "France", je dois supprimer tous les contacts qui y vivent (puisqu'ils ne seront alors rattachés à aucun pays)
  • 10. MySQL  Administration de MySqQL – L’administration peut se faire de deux manières • par PHP (voir plus loin) • Manuellement, par l’interface phpMyAdmin d’EasyPhp – L’interface phpMyAdmin • Pour y accéder :  Cliquer sur le bouton droit de la souris en le mettant sur le symbole d’Easyphp puis appuyer sur Administration  Ensuite, appuyer sur mysql Administration
  • 11. MySQL  On obtient Les bases existantes La base mysql et ses tables Informations générales sur le gestionnaire phpMyAdmin
  • 12. MySQL  En cliquant sur Databases : on obtient les bases enregistrées – On peut cocher et supprimer une base par Drop – On peut créer une nouvelle base
  • 13. MySQL  En cliquant sur la base mySql, on obtient ses tables – On peut supprimer une table en cochant et supprimant – On peut créer une nouvelle table
  • 14. MySQL  Retour sur la création d’une base : 2 méthodes
  • 15. Base de données  Création d’une base personnelle – Commençons par créer une base de données : ma- base • Laissez le type en Interclassement par défaut • ma-base(0) indique que la base contient 0 table • Regardez le code SQL qui s’affiche
  • 16. Création d’une base personnelle  Création d’une table – Créer dans ma-base, la table « contacts » suivante avec ses 5 champs: – Cette action conduit à afficher le premier enregistrement de la table contacts avec les 5 champs en attente
  • 17. Table MySql  Les champs – Le nom du champ • ne peut pas être nul, ni comporter de caractères accentués, espaces, -, .... par contre, il accepte _ – Le type de champ est sélectionné dans une liste de choix • pour l'instant, sélectionner VARCHAR qui correspond à du texte – La taille/valeurs • permet de déterminer la taille max des données à rentrer dans les champs – Interclassement • représente le jeu de caractères par défaut si vous ne sélectionnez rien (préférable) • sinon sélectionner Latin1_swedish_ci. Si le jeu de caractères n'est pas démarré dans phpMyAdmin, une erreur est produite – L'attribut peut-être rien, unsigned ou Unsigned zerofill • les 2 dernières valeurs s'utilisent uniquement pour des types de champs spéciaux – Null permet de dire si le champ peut-être null (vide) ou non – Default permet de donner une valeur par défaut au champ
  • 18. Table MySql  Les options – permet de déterminer si le champ est ou non une clé primaire • dans ce cas, la valeur du champ sera unique dans la table • aucun enregistrement n'aura la même valeur dans ce champ – index indique que le champ peut être utilisé comme une valeur de repérage (index) • permet d'augmenter les vitesses de traitement (tri) dans la table • la clé primaire est également un index – unique permet de spécifier que le contenu est unique dans l'ensemble du champ • évite les doublons – permettent d'indexer des textes complets • cette possibilité ralentit la table pour de longs champs
  • 19. Table MySql  Création de champs – Créez 5 champs de type VARCHAR (caractères de taille variables) • code, de taille 10, non null et unique • titre, de taille 30, non null et unique – N'oubliez pas de sauvegarder la table Remplissage du premier enregistrement
  • 20. 2  On obtient Pour modifier, supprimer un ou tous les champs Pour ajouter un champ
  • 21. Table MySql  Ajout d’enregistrement : insert
  • 22. Table MySql  Appuyer sur Browse pour voir les enregistrements
  • 23. Commandes SQL  Création de table CREATE TABLE – Syntaxe CREATE table nomdetable( nomattribut1 type[not null] [AUTO_INCREMENT] nomattribut2 type[not null] … nomattributN type[not null] … primary key (nomattribut1,...,nomattributN) ; – Auto_increment : l'entier sera augmenté de 1 à chaque nouvelle insertion
  • 24. Commandes SQL  Création de table : appuyer sur SQL et rentrer ce code
  • 25. Commandes SQL  Modification de la table – Une fois créée, on peut la modifier en utilisant ALTER TABLE et ADD – on peut la modifier en utilisant ALTER TABLE et DROP
  • 26. Commandes SQL  D’ailleurs, en voulant supprimer directement le champ, en cliquant sur la croix, voici ce qui s’affiche :
  • 27. Commandes SQL  Modification de la table – On peut la supprimer totalement par : • DROP TABLE clients_tbl
  • 28. Commandes SQL  Insertion d’enregistrements – INSERT INTO clients_tbl(id,prenom,nom,ne_le,ville,enfan ts) VALUES('','Patrick','Martin','1965-10- 08','Bordeaux','2') L’enregistremen t La requête d’affichage une fois l’insertion faite Devient visible
  • 29. Commandes SQL  Insertion d’enregistrements : de manière générale – Syntaxe • INSERT INTO votre_table (nomattribut1,...,nomattributN) values ('valeur1',...,'valeurN'); – Les attributs qui ne sont pas mentionnés prendront leur valeur par défaut – Exemple Soit la table Client-tbl (Id,nom,prenom,adresse) créée par : create table Client (id tinyint(3) unsigned not null AUTO_INCREMENT, nom varchar(10) not null default ' ', prenom varchar(10) not null default ' ', adresse varchar(50) not null default ' ', primary key (id));
  • 30. Commandes SQL  Insertion d’enregistrements : de manière générale – Remarque • La clef ID possède l'option auto_increment, les ID vont ainsi être créés automatiquement • En théorie, les numéros d'ID s'incrémentent par ordre croissant, mais si vous supprimez un enregistrement, la prochaine insertion d'un enregistrement se fera sur l'ID de l'enregistrement auparavant supprimé • Complétez la table ainsi :
  • 31. Commandes SQL  Sélection d’information d’enregistrements – affichez uniquement les personnes qui n'ont que 2 enfants, la requête SQL sera : SELECT * FROM clients_tbl WHERE enfants=‘2’ – demander l'affichage que des noms et prénoms : SELECT nom,prenom FROM clients_tbl WHERE enfants='2'
  • 32. Commandes SQL – Sélection combinée : • SELECT * FROM clients_tbl WHERE enfants='1' OR enfants='2' AND ville='Paris'
  • 34. Commandes SQL  La commande Update – UPDATE clients_tbl SET prenom='Jacques' WHERE id=1 – UPDATE clients_tbl SET prenom='Jean-Pierre', nom='Papin', ville='Marseille', enfants=3 WHERE id=1
  • 35. Commandes SQL  La commande DELETE DELETE FROM clients_tbl WHERE id=1 – supprime des enregistrements
  • 36. Commandes SQL  Jointure de tables – Soient les deux tables :
  • 37. Jointure de tables SELECT * FROM Livres, Genres WHERE Livres.CodeGenre = Genres.CodeGenre;
  • 38. Jointure de tables SELECT Titre, Livres.CodeGenre, LibelleGenre, Prix FROM Livres, Genres WHERE Livres.CodeGenre = Genres.CodeGenre;
  • 39. Utilisation avec PHP  Précautions – Ne touchez pas au mot de passe, – N’essayez pas de le changer – Le mot de passe à utiliser est "mysql"  Dans php.ini, enlever les ; avant : extension=php_mysql. dll php_pdo.dll php_pdo_mysql.dll
  • 40. Utilisation avec PHP  Utilisation de la classe PDO (PHP Data Object) – Principale nouveauté de PHP – C’est en quelque sorte un langage orienté objet pour traiter les bases de données – L’approche PDO permet d’étendre les fonctions d’accès à la base facilement et de manière transparente
  • 41. Utilisation avec PHP  Utiliser votre base de données – L’utilisation de la BD avec PHP se fait en 5 étapes • Connexion • Sélection de la BD • Requête • Exploitation des résultats • Fermeture de la connexion – Structure des classes de PDO • PDO propose 3 classes  PDO : lien à la BD  PDOStatement : requêtes et leurs résultats  PDOException : pour la gestion des erreurs
  • 42. Utilisation avec PHP  Connexion au serveur de données – La première étape consiste à déclarer les variables qui vont permettre la connexion à la base de données (ce sont les paramètres des fonctions de connexion à la base) – Ces variables sont : • $user : le nom d'utilisateur • $passwd : le mot de passe • $host : l'hôte (ordinateur sur lequel le SGBD est installé) • $bdd : le nom de la base de données – La deuxième étape est de construire la DSN (Data Source Name) $dsn = 'mysql:host=localhost;dbname=ma-base'; – Enfin, la connexion se fait par la création d’un objet de la classe PDO • $dbh= new PDO($dsn, $user, $pass); – Il ne faut pas oublier de fermer la base • $dbh=null;
  • 43. Utilisation avec PHP  connexion-PDO.php <?php $user = 'root'; $pass = 'mysql'; // Data Source Name $dsn = 'mysql:host=localhost;dbname=ma-base'; try{ //tentative de connexion : on crée un objet de la classe PDO $dbh= new PDO($dsn, $user, $pass); //S'il y a des erreurs de connexion, un objet PDOException est // lancé. Vous pouvez attraper cette exception si vous voulez // gérer cette erreur } catch (PDOException $e){ print "Erreur ! :" . $e->getMessage() . "<br/>"; die(); } ?>
  • 44. Utilisation avec PHP  Effectuer une requête – Une fois la connexion ouverte, on va pouvoir utiliser la BD pour lire, modifier… – Pour cela, on utilise le langage SQL  Pour envoyer une requête au serveur – On peut utiliser deux méthodes de la classe PDO • query() pour la sélection • exec() pour la mise à
  • 45. Utilisation avec PHP  Requête de sélection – On utilise la méthode query() – Les données ne sont pas affichées, elles sont mises en mémoire – Il faut donc aller les chercher et les afficher – La méthode fetchAll() retourne l’ensemble des données sous forme d’un tableau PHP et libère le SGBD – La méthode fetc() permet une lecture séquentielle du résultat – Le paramètre fetch_style détermine la façon dont PDO retourne les résultats (format des résultats)
  • 46. Utilisation avec PHP Effectuer une requête  Exemple 0 : – Créer une table : creation-table.php <?php //Inclusion du fichier contenant la connexion à la base include_once('connexion-PDO.php'); //Création de la table personne $sql="CREATE TABLE personne ( id_personne INTEGER PRIMARY KEY , nom VARCHAR( 20 ) NOT NULL , prenom VARCHAR( 20 ) , depart INTEGER( 2 ))";
  • 47. //création de la table sport $sql="CREATE TABLE sport ( id_sport INTEGER PRIMARY KEY , design VARCHAR( 30 ) UNIQUE NOT NULL)"; $sth = $dbh->query($sql); //création de la table pratique $sql="CREATE TABLE pratique ( id_personne INTEGER NOT NULL, id_sport INTEGER NOT NULL , niveau TINYINT, PRIMARY KEY (id_personne,id_sport))"; $sth = $dbh->query($sql); $dbh=NULL; ?>
  • 48. Utilisation avec PHP Effectuer une requête  Exemple 1 : – Lire tous les enregistrements : lire-enregistrements.php <?php //Inclusion du fichier contenant la connexion à la base include_once('connexion-PDO.php'); //La requête SQL $sql = "SELECT * FROM `infos_tbl` LIMIT 0 , 30"; //Recherche des données $sth = $dbh->query($sql); // On voudrait les résultats sous la forme d’un tableau associatif $result = $sth->fetchAll(PDO::FETCH_ASSOC); //Affichage des résultats foreach ($result as $row){ echo $row['nom'];echo '-'; echo $row['prenom'];echo '-'; echo $row['email'];echo '<br/>'; }
  • 49. Utilisation avec PHP Effectuer une requête  Base : ma-base – Table : infos_tbl – Résultats [email protected] Maquin-Frédé[email protected] Moinel-Thomas-thomas.Moinel@univ-nancy 2.fr [email protected] [email protected]
  • 50. Utilisation avec PHP Effectuer une requête  Exemple 2 : calculer le nombre d’enregistrements : nb-enregistrements.php – Deux manières : • Créer une requête spécifique en utilisant la fonction count() de MySql • Compter le nombre d’éléments contenus dans le tableau renvoyé par la méthode fetchAll()
  • 51. <?php include_once('connexion-PDO.php'); //1) En utilisant une requête particulière $sql = "SELECT COUNT(*) as nbe FROM `infos_tbl` WHERE nom='Belaid'"; $sth = $dbh->query($sql); $result = $sth->fetchAll(); $nombre = $result[0] ['nbe']; echo $nombre; echo "<br/>"; //2) En comptant le nombre d'éléments présents dans le tableau des résultats $sql = "SELECT nom, prenom FROM `infos_tbl` WHERE nom='Belaid'"; $sth = $dbh->query($sql); $result = $sth->fetchAll(); $nombre = count($result); echo $nombre; $dbh=NULL; ?>
  • 52. Utilisation avec PHP Effectuer une requête  Requête d’insertion/modification – On utilise la méthode exec() de la classe PDO – Exemple : insertion-enreg.php <?php //Inclusion du fichier contenant la connexion à la base include_once('connexion-PDO.php'); //Insertion d'un enregistrement $sql = "INSERT INTO infos_tbl (id,nom,prenom,email,icq,titre,url) VALUES ('', 'Ouwayed', 'Nazih', '[email protected]', '' , 'Thésard', 'www.loria.fr')"; //Exécution de la requête $dbh->exec($sql); $dbh=NULL; ?> – exec() retourne le nombre de lignes modifiées, 0 si aucune et FALSE si erreur de requête
  • 53. 53 Utilisation avec PHP Effectuer une requête  Gestion des erreurs – Les erreurs sont stockées et consultables en faisant appel aux méthodes errorCode() et errorInfo() – Exemple : gestion-erreur-mod-sil.php <?php //Inclusion du fichier contenant la connexion à la base include_once('connexion-PDO.php'); //Insertion d'un enregistrement $sql = ""; if(!$dbh->exec($sql)){ echo $dbh->errorCode() . "<br>"; echo $dbh- >errorInfo(); print_r($info); //$info[0]==$dbh->errrCode() Code d'erreur unifié //$info[1] Code d'erreur spécifique au driver //$info[0] message d'erreur spécifique au driver }
  • 54. Utilisation avec PHP Effectuer une requête  Gestion des erreurs – Utiliser les exceptions : gestion-erreur-mod-excep.php <?php //Inclusion du fichier contenant la connexion à la base include_once('connexion-PDO.php'); //On définit le handler d'erreur $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $sql = "INSERT INTO infos_tbl VALUES ('', 'Ouwayed', 'Nazih', '[email protected]', '' , 'Thésard', 'www.loria.fr')"; $dbh->exec($sql); //si une erreur a eu lieu, une exception est lancée }catch (PDOException $e){ print "Erreur ! :" . $e->getMessage() ; "<br/>"; } $dbh=NULL; ?>
  • 55. TD  Énoncé – On veut créer un site HTML qui contrôle la connexion – Le contrôle se fait par l’affichage d’un formulaire permettant de rentrer : • Le nom d’identifiant • Un mot de passe – Le formulaire indique également si : • on a oublié son mot de passe (et qu’on demande de le retrouver)  en indiquant son email • on veut s’inscrire au site, dans ce cas, on demande d’entrer  son identifiant  son de mot de passe  une confirmation du mot de passe  âge, sexe, profession, affiliation, ville, pays • où âge, sexe et affiliation ne sont pas obligatoires
  • 56. TD  Énoncé (suite) – Le contrôle : • Un premier contrôle en local permet de valider ou non la saisie des champs (vides, comportant ou non des caractères spécifiques comme le @ pour le email) • Un contrôle plus poussé consiste à aller vérifier dans la base de données "abonnés" (MySQl) – L’inscription au site • doit conduire au rangement de l’identifiant et du mot de passe dans la base "abonnés"