• Aucun résultat trouvé

[PDF] Cours PHP : Bases de données | Télécharger PDF

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours PHP : Bases de données | Télécharger PDF"

Copied!
11
0
0

Texte intégral

(1)

Bertrand Estellon

Aix-Marseille Universit´e

(2)

Base de donn´ees SQLite et PDO

SQLite et PDO

SQLite ´

ecrit les donn´

ees relatives `

a la base dans un unique fichier sur le

disque dur du serveur. La commande sqlite3 permet d’ouvrir la base et

effectuer des requˆ

etes SQL (pratique pour d´

ebugger).

PDO (PHP Data Objects) est une interface pour acc´

eder `

a une base de

donn´

ees depuis PHP. Elle g`

ere la connexion, l’envoie des requˆ

etes, la

econnexion `

a la base de donn´

ees. Elle permet de changer plus facilement

de moteur de bases de donn´

ees (Par exemple, SQLite → MySQL).

Ouverture de la base :

<? t r y { $bd = new PDO( ” s q l i t e : d a t a b a s e . s q l i t e ” ) ; } c a t c h ( PDOException $e ) { d i e ( ’ E r r e u r : ’ . $e−>g e t M e s s a g e ( ) ) ; } ?>

(3)

Une fois l’instance de PDO construite, vous effectuez des requˆ

etes avec :

I

$bd->exec($requete) : pour modifier la base de donn´

ees

I

$bd->query($requete) : pour extraire des donn´

ees de la base

Exemples :

$bd−>e x e c ( ”CREATE TABLE u s e r s ( ” . ” n i c k n a m e c h a r ( 2 0 ) , ” . ” p a s s w o r d c h a r ( 5 0 ) ” . ” ) ; ” ) ;

$ r e s =$bd−>e x e c ( ’UPDATE u s e r s SET p a s s w o r d =”’ .

md5 ( $ p a s s w o r d ) . ’ ” WHERE n i c k n a m e =”’ . $ n i c k n a m e . ’ ”; ’ ) ; e c h o ”nombre de l i g n e s m o d i f i e e s = $ r e s ” ;

(4)

Base de donn´ees Les requˆetes et fonctions utiles

Injections SQL

Le code suivant :

$ n i c k n a m e = ’ a a ”; DELETE FROM u s e r s ; ’ .

’ SELECT ∗ FROM u s e r s WHERE n i c k n a m e =”’ ; $ p a s s w o r d = ” t r u c ” ;

$ r e s = $bd−>e x e c ( ’UPDATE u s e r s SET p a s s w o r d =”’ .

md5 ( $ p a s s w o r d ) . ’ ” WHERE n i c k n a m e =”’ . $ n i c k n a m e . ’ ”; ’ ) ;

ex´

ecute la requˆ

ete SQL suivante :

UPDATE u s e r s SET p a s s w o r d=” . . . . ” WHERE n i c k n a m e=”a a ” ; DELETE FROM u s e r s ;

SELECT ∗ FROM u s e r s WHERE n i c k n a m e=” ” ;

Protection contre les injections SQL :

$ r = $bd−>p r e p a r e ( ’UPDATE u s e r s SET p a s s w o r d = ? ’ . ’WHERE n i c k n a m e = ? ’ ) ;

(5)

Pour faire une requˆ

ete SQL :

$ r e s = $bd−>q u e r y ( ” s e l e c t ∗ f r o m s o n d a g e s ” ) ; v a r d u m p ( $ r e s ) ;

affiche ’object(PDOStatement)#2 (1) {

[”queryString”]=> string(19) ”select * from sondages” }’

Pour connaˆıtre le nombre de lignes :

e c h o ”nombre de l i g n e s : ” .$ r e s −>r o w C o u n t ( ). ”\ n ” ;

Pour parcourir les lignes :

$ r e s = $bd−>q u e r y ( ” s e l e c t ∗ f r o m s o n d a g e s ” ) ; w h i l e ( $ l i g n e = $ r e s −>f e t c h ( )) { e c h o $ l i g n e [ ’ c r e a t e u r ’ ] . ” p o s e l a q u e s t i o n : ” . $ l i g n e [ ’ q u e s t i o n ’ ] . ”\ n ” ; }

(6)

Base de donn´ees Les requˆetes et fonctions utiles

SQLite et PDO

Pour mettre toutes les lignes dans un tableau :

$ r e s = $bd−>q u e r y ( ” s e l e c t ∗ f r o m s o n d a g e s ” ) ; $ l i g n e s = $ r e s −> f e t c h A l l ( ) ; f o r e a c h ( $ l i g n e s a s $ l i g n e ) { e c h o $ l i g n e [ ’ c r e a t e u r ’ ] . ” p o s e l a q u e s t i o n : ” . $ l i g n e [ ’ q u e s t i o n ’ ] . ”\ n ” ; }

Voir aussi, dans la classe PDOStatement, les m´

ethodes :

I

bindColumn

: attache une variable `

a une colonne

I

errorInfo

: information d’erreur

I

fetchColumn

: r´

ecup`

ere la valeur dans une colonne donn´

ee

(7)

Voir aussi, dans la classe PDO, les m´

ethodes :

I

beginTransaction

: d´

emarre une transaction

I

commit

: valide une transaction

I

rollback

: annule une transaction

I

errorInfo

: Retourne les informations associ´

ees `

a l’erreur

I

errorCode

: Retourne le SQLSTATE associ´

e avec la derni`

ere op´

eration

I

prepare

: Pr´

epare une requˆ

ete `

a l’ex´

ecution et retourne un objet

I

quote

: Prot`

ege une chaˆıne pour l’utiliser dans une requˆ

ete SQL PDO

$ s t r i n g = ’ C h a i n e

\ ’

p a r t i c u l i e r e ’ ;

p r i n t

”non e c h a p p e e

:

$ s t r i n g \ n ” ;

p r i n t

”e c h a p p e e

: ” .

$bd−>q u o t e ( $ s t r i n g )

.

”\ n ” ;

Chaine non echappee : Chaine ’ particuliere

Chaine echappee : ’Chaine ” particuliere’

(8)

Base de donn´ees Les requˆetes et fonctions utiles

Base de donn´

ees du projet

Les trois tables utilis´

ees dans le projet :

u s e r s ( n i c k n a m e

c h a r ( 2 0 ) ,

p a s s w o r d

c h a r ( 5 0 ) ) ;

s u r v e y s ( i d

i n t e g e r

p r i m a r y

k e y

a u t o i n c r e m e n t ,

o w n e r

c h a r ( 2 0 ) ,

q u e s t i o n

c h a r ( 2 5 5 ) ) ;

r e s p o n s e s ( i d

i n t e g e r

p r i m a r y

k e y

a u t o i n c r e m e n t ,

i d s u r v e y

i n t e g e r ,

t i t l e

c h a r ( 2 5 5 ) ,

c o u n t

i n t e g e r ) ;

(9)

p u b l i c f u n c t i o n s a v e S u r v e y (& $ s u r v e y ) { i f ( $ s u r v e y −>g e t I d ()!== n u l l ) r e t u r n f a l s e ;

$ t h i s −>c o n n e c t i o n −>b e g i n T r a n s a c t i o n ( );

$ r = $ t h i s −>c o n n e c t i o n −>p r e p a r e ( ’ INSERT INTO s u r v e y s ( owner , ’ . ’ q u e s t i o n ) VALUES ( ? , ? ) ; ’ ) ; i f ( $ r===f a l s e ) { $ t h i s −>c o n n e c t i o n −> r o l l b a c k ( ); r e t u r n f a l s e ; } i f ( $ r −>e x e c u t e ( a r r a y ( $ s u r v e y −>g e t O w n e r ( ) , $ s u r v e y −>g e t Q u e s t i o n ()))=== f a l s e ) { $ t h i s −>c o n n e c t i o n −> r o l l b a c k ( ); r e t u r n f a l s e ; } $ i d = $ t h i s −>c o n n e c t i o n −> l a s t I n s e r t I d ( ); $ s u r v e y −>s e t I d ( $ i d ) ; f o r e a c h ( $ s u r v e y −>g e t R e s p o n s e s ( ) a s $ r e s p o n s e ) i f ( ! $ t h i s −>s a v e R e s p o n s e ( $ r e s p o n s e ) ) { $ t h i s −>c o n n e c t i o n −> r o l l b a c k ( ); r e t u r n f a l s e ; } $ t h i s −>c o n n e c t i o n −>commit ( ); r e t u r n t r u e ; }

(10)

Base de donn´ees Les requˆetes et fonctions utiles

La classe Database

c l a s s D a t a b a s e { p r i v a t e $ c o n n e c t i o n ; p u b l i c f u n c t i o n c o n s t r u c t ( ) { . . . } p u b l i c f u n c t i o n c h e c k P a s s w o r d ( $ n i c k n a m e , $ p a s s w o r d ) { . . . } p u b l i c f u n c t i o n a d d U s e r ( $ n i c k n a m e , $ p a s s w o r d ) { . . . } p u b l i c f u n c t i o n u p d a t e U s e r ( $ n i c k n a m e , $ p a s s w o r d ) { . . . } p u b l i c f u n c t i o n s a v e S u r v e y (& $ s u r v e y ) { . . . } p u b l i c f u n c t i o n l o a d S u r v e y s B y O w n e r ( $ o w n e r ) { . . . } p u b l i c f u n c t i o n l o a d S u r v e y s B y K e y w o r d ( $ k e y w o r d ) { . . . } p u b l i c f u n c t i o n v o t e ( $ i d ) { . . . } p r i v a t e f u n c t i o n c r e a t e D a t a B a s e ( ) { . . . } p r i v a t e f u n c t i o n c h e c k N i c k n a m e V a l i d i t y ( $ n i c k n a m e ) { . . . } p r i v a t e f u n c t i o n c h e c k P a s s w o r d V a l i d i t y ( $ p a s s w o r d ) { . . . } p r i v a t e f u n c t i o n c h e c k N i c k n a m e A v a i l a b i l i t y ( $ n i c k n a m e ) { . . . } p r i v a t e f u n c t i o n s a v e R e s p o n s e (& $ r e s p o n s e ) { . . . } p r i v a t e f u n c t i o n l o a d S u r v e y s ( $ a r r a y S u r v e y s ) { . . . } p r i v a t e f u n c t i o n l o a d R e s p o n s e s (& $ s u r v e y , $ a r r a y R e s p o n s e s ) { . . . } }

(11)

Les besoins :

I

Sauvegarde simple des objets en base de donn´

ees :

$ u s e r = new U s e r ( ) ; $ u s e r −>n i c k n a m e = ”bob ” ; $ u s e r −>p a s s w o r d = md5 ( ” t r u c ” ) ; $ u s e r −>s a v e ( ) ;

I

Cr´

eation automatique des tables ;

I

Chargement des objets ;

I

Gestion des relations entre les objets/enregistrements ;

I

...

Quelques solutions en PHP :

I

Propel

I

Doctrine

I

Zend Framework

I

Redbean

I

...

Références

Documents relatifs

La fin de la guerre froide a eu, entre autres, comme effet de relancer le débat concernant l’avenir des armes nucléaires et la dissuasion.1 Dès le début des années 1990,

Le Nil trace un chapelet de villes dans le désert, alors que le Delta montre une organisation beaucoup plus régulière.. On retrouve quelques petites villes le long des côtes

Pour citer cet article : Sachsé V., 2020, « Planification informelle dans la ville de Rome : l’émergence des jardins partagés comme nouvelles formes de communs », Urbanités,

On peut ainsi repérer deux phases dans le premier tiers de la consultation : c’est d’abord le patient qui s’exprime, les échanges sont courts (tours 1 à 40) ; puis le

deux expressions reprennent dans le titre même la manière dont les informateurs réunionnais de la communauté tamoule désignent et nomment l’entrée dans le

2 Pesquisador(a) do Instituto Capixaba de Pesquisa, Assistência Técnica e Extensão Rural (Incaper); 3 Bolsista FAPES de Iniciação Científica e Tecnológica (ICT);

1 Dans le cadre d'une réflexion menée sur les critères en fonction desquels d'anciens buveurs et leurs conjoints définissent le passage du consommateur à

le meilleur des cas, on les verra comme des clients, non pas que les locataires aient effectivement tous le choix de leur logement, mais parce que cela permet de prendre