1
PHP - BD
S. Lanquetin
LE2I
Aile sciences de l'ingénieur
Bureau G206
PostgreSQL
S. Lanquetin - L3 : Introduction Technologie pour le Web
3
Présentation
PostgreSQL s'appuie sur le modèle
relationnel mais apporte les extensions
suivantes :
les classes,
l'héritage,
les types de données utilisateurs (tableaux,
structures, listes..),
les fonctions,
Site http://postgresql.org/
S. Lanquetin - L3 : Introduction Technologie pour le Web
4
Connexion (I)
! pg_connect(…) : renvoie true si la connexion est établie
! pg_pconnect (…) : connexion persistante (ne se referme pas
automatiquement en fin de script).
! pg_dbname(…) : retourne le nom de la base de données
! pg_close(…) : permet de fermer la connexion
! On peut intégrer ce code dans un fichier que lon pourra joindre
par include . (Sécuriser le mot de passe de connexion).
$id_connexion = pg_connect("dbname=nom_base host=nom_serveur
port=num_port user=nom_utilisateur password=mot_passe");
pg_close($id_connexion);
$nom_base = pg_dbname ($id_connexion);
S. Lanquetin - L3 : Introduction Technologie pour le Web
5
Connexion (II)
!
Exemple 1 :
<?php
if( $id =pg_connect("dbname=nom_base host=nom_serveur
port=num_port user=nom_utilisateur password=mot_passe")) {
if(pg_dbname($id ) == "nom_base" ) {
echo "Succès de connexion.";
/* code du script */
} else {
exit("Echec de connexion à la base.");
}
pg_close($id);
} else {
exit("Echec de connexion au serveur de base de données.");
}
?>
S. Lanquetin - L3 : Introduction Technologie pour le Web
6
Requête
!pg_query(..) pour envoyer une requête à une base de données
retourne un identifiant de résultat ou FALSE si échec.
Les requêtes les plus couramment utilisées :
CREATE (création dune table),
SELECT (sélection),
INSERT (insertion),
UPDATE (mise à jour des données),
DELETE (suppression),
ALTER (modification dune table), etc.
$id_resultat = pg_query($id_connexion, $requete);
$result= pg_query ($id_connexion, "SELECT adresse FROM users
WHERE name = pg_escape_string($name) ");
2
S. Lanquetin - L3 : Introduction Technologie pour le Web
7
Extraction des données (I)
! Affichage des résultats ligne par ligne.
SQL > SELECT * FROM etudiants;
ID NOM OPTION
----------------------------
1 arthur image 1ère ligne
2 clement multimedia 2ème ligne
3 vincent image pour multimedia 3è ligne
!plusieurs valeurs=>tableau, tableau associatif, ou objet.
S. Lanquetin - L3 : Introduction Technologie pour le Web
8
Extraction des données (II)
pg_fetch_row($result) : retourne une ligne de résultat sous la
forme dun tableau. Les éléments du tableau étant les valeurs des
attributs de la ligne. Retourne FALSE sil ny a plus aucune ligne.
Exemple :
Ici, on accède aux valeurs de la ligne par leur indice dans le tableau.
$requet = "SELECT * FROM etudiants";
if($result = pg_query($requet)) {
while($ligne = pg_fetch_row($result)) {
$id = $ligne[0];
$nom = $ligne[1];
$option = $ligne[2];
echo "$id - $nom, $option <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
9
Extraction des données (III)
pg_fetch_array($result) : retourne tableau et tableau associatif.
Exemple :
Ici, on accède aux valeurs de la ligne par lattribut dans le tableau
associatif.
$requet = "SELECT * FROM etudiants";
if($result = pg_query($requet)) {
while($ligne = pg_fetch_array($result)) {
$id = $ligne['id'];//$id = $ligne[0];
$nom = $ligne['nom'];
$option = $ligne['option'];
echo "$id - $nom, $option <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
10
Extraction des données (III)
pg_fetch_assoc($result) : retourne un tableau associatif. Les clés
étant les noms des attributs et leurs valeurs associées leurs valeurs
respectives. Retourne FALSE sil ny a plus aucune ligne.
Exemple :
Ici, on accède aux valeurs de la ligne par lattribut dans le tableau
associatif.
$requet = "SELECT * FROM etudiants";
if($result = pg_query($requet)) {
while($ligne = pg_fetch_assoc($result)) {
$id = $ligne['id'];
$nom = $ligne['nom'];
$option = $ligne['option'];
echo "$id - $nom, $option <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
11
Extraction des données (IV)
pg_fetch_object($result) : retourne un objet. Les attributs de
lobjet correspondent à ceux de la ligne de résultat. Et les valeurs
des attributs de lobjet correspondent à ceux de la ligne de
résultat. Retourne FALSE sil ny a plus aucune ligne.
Exemple 3 :
Ici, on accède aux valeurs par leur attribut dans lobjet.
$requet = "SELECT * FROM etudiants";
if($result = pg_query($requet)) {
while($ligne = pg_fetch_object($result)) {
$id = $ligne->id;
$nom = $ligne->nom;
$option = $ligne->option;
echo "$id - $name, $address <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
12
Fonctions additionnelles
Quelques fonctions supplémentaires très utiles :
!pg_free_result($result) : efface de la mémoire du serveur les
lignes de résultat de la requête identifiées par $ result.
!pg_num_fields($result) : retourne le nombre dattributs
dans un résultat.
!pg_num_rows($result) : retourne le nombre
d'enregistrement dans un résultat.
!Penser à bien tester la valeur de retour des fonctions
(pg_query et les autres) afin de détecter toute erreur
3
S. Lanquetin - L3 : Introduction Technologie pour le Web
13
Fonctions additionnelles
!$nom_hote = pg_host($id_connexion) : retourne le
nom de l'hôte pour la connexion spécifiée
!$option_connexion = pg_options($id_connexion) :
retourne les options d'une connexion SQL
! $num_port = pg_port($id_connexion) : retourne le
numéro de port pour la connexion indiquée
! pg_set_client_encoding($id_connexion, $encodage) :
détermine l'encodage du client (SQL_ASCII, UNICODE,…)
!$encodage = pg_client_encoding($id_connexion) :
retourne l'encodage du client;
MySQL
S. Lanquetin - L3 : Introduction Technologie pour le Web
15
Présentation
!MySQL : base de données implémentant le langage
de requête SQL.
!phpMyAdmin : outil pour administrer aisément les
bases de données MySQL avec php.
http://www.phpmyadmin.net.
!Avec MySQL vous pouvez créer plusieurs bases de
données sur un serveur. Une base est composée de
tables contenant des enregistrements.
http://www.mysql.com/.
!Documentation MySQL :
http://www.mysql.com/documentation/
En français chez nexen : http://dev.nexen.net/
docs/mysql/.
S. Lanquetin - L3 : Introduction Technologie pour le Web
16
Connexion (I)
! mysql_connect(…) : connection au serveur $server
retourne lidentifiant de connexion si succès, FALSE sinon
! mysql_pconnect (…) : connexion persistante (ne se referme
pas automatiquement en fin de script).
!mysql_select_db(…) : choix de la base $base,
retourne TRUE en cas de succès, sinon FALSE
!mysql_close (…) : permet de fermer la connexion
!intégration de ce code avec include. (Sécuriser le mot de passe de
connexion).
$id_connexion = mysql_connect($server,$user,$password)
mysql_close($id_connexion);
if(mysql_select_db($base[,$idconnexion]) )
S. Lanquetin - L3 : Introduction Technologie pour le Web
17
Connexion (II)
!
Exemple 1 :
<?php
if( $id =mysql_connect("nom_serveur","nom_utilisateur","mot_passe")) {
if($id_db=mysql_select_db($base,$id) ) {
echo "Succès de connexion.";
/* code du script */
} else {
exit("Echec de connexion à la base.");
}
mysql_close($id);
} else {
exit("Echec de connexion au serveur de base de données.");
}
?>
S. Lanquetin - L3 : Introduction Technologie pour le Web
18
Requête
!mysql_query(..) pour envoyer une requête à une base de données
retourne un identifiant de résultat ou FALSE si échec.
Les requêtes les plus couramment utilisées :
CREATE (création dune table),
SELECT (sélection),
INSERT (insertion),
UPDATE (mise à jour des données),
DELETE (suppression),
ALTER (modification dune table), etc.
!Attention, contrairement à Oracle SQL, les requêtes MySQL ne se terminent
pas par un point virgule ;
$id_resultat = mysql_query($requete);
$result = mysql_query(‘SELECT adresse FROM users WHERE name =\’ ’.
mysql_real_escape_string($name) .’\’ ’);
4
S. Lanquetin - L3 : Introduction Technologie pour le Web
19
Extraction des données (I)
! Affichage des résultats ligne par ligne.
SQL > SELECT * FROM etudiants;
ID NOM OPTION
----------------------------
1 arthur image 1ère ligne
2 clement multimedia 2ème ligne
3 vincent image pour multimedia 3ème ligne
!plusieurs valeurs=>tableau, tableau associatif, ou objet.
S. Lanquetin - L3 : Introduction Technologie pour le Web
20
Extraction des données (II)
mysql_fetch_row($result) : retourne une ligne de résultat sous la
forme dun tableau. Les éléments du tableau étant les valeurs des
attributs de la ligne. Retourne FALSE sil ny a plus aucune ligne.
Exemple :
Ici, on accède aux valeurs de la ligne par leur indice dans le tableau.
$requet = "SELECT * FROM etudiants";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_row($result)) {
$id = $ligne[0];
$nom = $ligne[1];
$option = $ligne[2];
echo "$id - $nom, $option <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
21
Extraction des données (III)
mysql_fetch_array($result) : retourne tableau et tableau associatif.
Exemple :
Ici, on accède aux valeurs de la ligne par lattribut dans le tableau
associatif.
$requet = "SELECT * FROM etudiants";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_array($result)) {
$id = $ligne["id"];
$nom = $ligne["nom"];
$option = $ligne["option"];
echo "$id - $nom, $option <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
22
Extraction des données (III)
mysql_fetch_assoc($result) : retourne un tableau associatif. Les
clés étant les noms des attributs et leurs valeurs associées leurs valeurs
respectives. Retourne FALSE sil ny a plus aucune ligne.
Exemple :
Ici, on accède aux valeurs de la ligne par lattribut dans le tableau
associatif.
$requet = "SELECT * FROM etudiants";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_assoc($result)) {
$id = $ligne["id"];
$nom = $ligne["nom"];
$option = $ligne["option"];
echo "$id - $nom, $option <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
23
Extraction des données (IV)
mysql_fetch_object($result) : retourne un objet. Les attributs
de lobjet correspondent à ceux de la ligne de résultat. Et les
valeurs des attributs de lobjet correspondent à ceux de la ligne
de résultat. Retourne FALSE sil ny a plus aucune ligne.
Exemple 3 :
Ici, on accède aux valeurs par leur attribut dans lobjet.
$requet = "SELECT * FROM etudiants";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_object($result)) {
$id = $ligne->id;
$nom = $ligne->nom;
$option = $ligne->option;
echo "$id - $name, $address <br />";
}
} else {
echo "Erreur de requête de base de données.";
}
S. Lanquetin - L3 : Introduction Technologie pour le Web
24
Fonctions additionnelles
Quelques fonctions supplémentaires très utiles :
!mysql_free_result($result) : efface de la mémoire du
serveur les lignes de résultat de la requête identifiées par
$requet. Très utile pour améliorer les performances du serveur.
!mysql_insert_id([$id]) : retourne lidentifiant dun attribut
clé primaire AUTO_INCREMENT de la dernière insertion.
!mysql_num_fields($result) : retourne le nombre dattributs
du résultats.
!mysql_num_rows($result) : retourne le nombre de lignes du
résultats. Et ainsi permet de remplacer le while par un for.
Penser à bien tester la valeur de retour des fonctions
(mysql_query et les autres) afin de détecter toute erreur et
déviter les
Warnings
.
5
PDO
25
Qu'est ce que PDO
!PHP Data Objects
!Interface d'abstraction à l'accès de données
!Écrit en C
!Fournit avec php 5.1 extension pour php 5.0
!Ne fonctionne pas avec les versions antérieures!
S. Lanquetin - L3 : Introduction Technologie pour le Web
26
Les BD supportées
!MySQL 3,4,5
!PostgreSQL
!SQLite 2 & 3
!ODBC
!DB2
!Oracle
!Firebird
!FreeTDS/Sybase/MSSQL
S. Lanquetin - L3 : Introduction Technologie pour le Web
27
Installation
!Activer PDO
php.ini : extension=php_pdo.dll
!Activer le driver PDO de la base de données
choisie
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
S. Lanquetin - L3 : Introduction Technologie pour le Web
28
Afficher drivers PDO disponibles
!Lancer ce script pour connaître les drivers
disponibles
S. Lanquetin - L3 : Introduction Technologie pour le Web
29
<?php
foreach( get_loaded_extensions () as $extension) {
if(strpos(strtolower($extension), 'pdo') !==
FALSE) {
echo $extension.'<br/>';
}
}
?>
Connexion
!Création d'une instance de la classe de base de
PDO
Connexion MySQL
S. Lanquetin - L3 : Introduction Technologie pour le Web
30
<?php
// connexion => création dune instance
$bd =
new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// déconnexion
$bd = null;
?>
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !