• Aucun résultat trouvé

Requêtes Préparées

Dans le document cours poo php pas à pas (Page 141-150)

8.3.1 Principe des Requêtes Préparées

L’idée des requêtes préparées est la suivante :

1. On indique à PDO la requête SQL, sauf que les valeurs (attributs des tables...) ne sont pas précisées (ce sont des ?).

2. Cela permet déjà à PDO d’analyser une fois pour toute la requête, même si on doit exécuter la requête plusieurs fois avec des valeurs différentes. C’est ce qu’on appelle préparer la requête. Cela améliore généralement l’efficacité, réduisant la charge du serveur et les délais d’exécution des requêtes.

3. Avant d’exécuter la requête préparée, ou au moment de l’exécution de la requête pré- parée, on spécifie les valeurs (attributs des tables...) qui viennent remplace les ? dans la

requête. Ces valeurs, qui peuvent correspondre à des inputs utilisateur, sont

automatiquement filtrée, évitant tout risque d’injection SQL.

Le mécanisme des requêtes préparées repose sur un lien effectué (avec la méthode bindParam) entre une variable PHP (donnée par sa référence), et une valeur non fixée (?) dans la requête. Il peut y avoir plusieurs syntaxes pour les requêtes préparées.

8.3.2 Syntaxe avec des Points d’Interrogation (?)

Voyons déjà un exemple d’insertion d’une adresse dans une table. L’adresse est saisie dans un formulaire :

Code Source 8.7 : exemples/pdo/ex05_formAdresse.php

1 < !doctype html> 2 <html l a n g=” f r ”> 3 <head> 4 <meta c h a r s e t=”UTF−8” /> 5 <l i n k r e l=” s t y l e s h e e t ” h r e f=” . / mySt yl e . c s s ” /> 6 < t i t l e >S a i s i e d ’ une Adresse </ t i t l e > 7 </head> 8 <body> 9 <h1>S a i s i e d ’ une a d r e s s e </h1> 10 <form method=” p o s t ” a c t i o n=” e x 0 7 _ r e q u e t e s P r e p a r e e s . php ”> 11 <p> 12 <l a b e l fo r=”numeroRue”>Numé ro </ l a b e l >

13 <i n p u t type=” t e x t ” name=”numeroRue” i d=”numeroRue” s i z e=”4”/><br/> 14 </p>

15 <p>

16 <l a b e l fo r=” rue ”>P l a c e /Rue*</ l a b e l >

17 <i n p u t type=” t e x t ” name=” rue ” i d=”numeroRue” s i z e=” 30 ”/> 18 </p>

19 20 <p>

21 <l a b e l fo r=” complementAddr ”>Complé ment d ’ a d r e s s e </ l a b e l >

22 <i n p u t t y p e =” t e x t ” name=”complementAddr ” i d =”complementAddr ” s i z e =”30”/>< b r/>

23 </p> 24 <p> 25 < l a b e l f o r =” c o d e P o s t a l ”>Code p o s t a l *</ l a b e l > 26 <i n p u t t y p e =” t e x t ” name=” c o d e P o s t a l ” i d =” c o d e P o s t a l ” s i z e =”10”/>< b r/> 27 </p> 28 <p> 29 < l a b e l f o r =” v i l l e ”> V i l l e *</ l a b e l > 30 <i n p u t t y p e =” t e x t ” name=” v i l l e ” i d =” v i l l e ” s i z e =”10”/>< b r/> 31 </p> 32 <p>

33 <i n p u t t y p e =”s u b m i t ” v a l u e =”Envoyer ” c l a s s=”s a n s L a b e l”></i n p u t >

34 </p>

35 </form> 36 </body> 37 </html>

Les valeurs saisies par l’utilisateur seront récupérées du tableau $_POST dans un fichier PHP, qui sera inclus par un require juste avant d’exécuter la requête de type INSERT :

Code Source 8.8 : exemples/pdo/ex06_retrieveInputPosts.php

1 < ?php

2 $numeroRue=” ” ;

3 i f ( i s s e t ($_POST [ ’ numeroRue ’ ] ) ) {

4 $numeroRue = f i l t e r _ v a r ($_POST [ ’ numeroRue ’ ] , FILTER_SANITIZE_STRING) ;

5 }

6 $ r u e=” ” ;

7 i f ( i s s e t ($_POST [ ’ rue ’ ] ) ) {

8 $ r u e = f i l t e r _ v a r ($_POST [ ’ rue ’ ] , FILTER_SANITIZE_STRING) ;

9 }

10

11 $complementAddr=” ” ;

12 i f ( i s s e t ($_POST [ ’ complementAddr ’ ] ) ) {

13 $complementAddr = f i l t e r _ v a r ($_POST [ ’ complementAddr ’ ] ,

FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW|FILTER_FLAG_ENCODE_HIGH) ; 14 } 15 $ c o d e P o s t a l=” ” ; 16 i f ( i s s e t ($_POST [ ’ c o d e P o s t a l ’ ] ) ) { 17 $ c o d e P o s t a l = f i l t e r _ v a r ($_POST [ ’ c o d e P o s t a l ’ ] , FILTER_SANITIZE_STRING) ; 18 } 19 $ v i l l e=” ” ; 20 i f ( i s s e t ($_POST [ ’ v i l l e ’ ] ) ) { 21 $ v i l l e = f i l t e r _ v a r ($_POST [ ’ v i l l e ’ ] , FILTER_SANITIZE_STRING) ; 22 } 23 $pays=” France ” ;

24 i f ( i s s e t ($_POST [ ’ pays ’ ] ) && $_POST [ ’ pays ’ ] != ” ” ) {

25 $pays = f i l t e r _ v a r ($_POST [ ’ pays ’ ] , FILTER_SANITIZE_STRING) ;

26 }

27 ?>

Voici enfin l’exemple qui effectue :

1. La préparation de la requête de type INSERT (avec des ”?” à la place des attributs de l’adresse) ;

2. Définit (avec bindValue) le lien entre les ”?” et des variables PHP ; 3. Exécute la requête (en effectuant les tests d’erreur).

Code Source 8.9 : exemples/pdo/ex07_requetesPreparees.php

1 < ?php

2 // Connexion à l a b a s e de donn é e s

3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / ex03_connectToDatabasePDO . php ’ ) ; 4

5 // Pr é p a r a t i o n de l a r e q u ê t e ( cha î ne r e p r é s e n t a n t une r e q u ê t e SQL 6 // s a u f que l e s v a l e u r s à i n s é r e r dont d e s ?)

7 $ s t a t e m e n t = $dbh−>prepare ( ’INSERT INTO Adresse ( idAdresse , numeroRue , rue , ’

8 . ’ complementAddr , c o d e P o s t a l , v i l l e , pays ) ’

9 . ’VALUES ( ? , ? , ? , ? , ? , ? , ?) ’ ) ;

10

11 // Test en s u p p o s a n t l e mode de g e s t i o n d ’ e r r e u r s PDO : :ERRMODE_SILENT

12 // ( sinon , en mode PDO : :ERRMODE_EXCEPTION i l f a u d r a i t u t i l i s e r t r y . . . c a t c h ) 13 i f ( $ s t a t e m e n t === f a l s e ) {

15 . ” ( par exemple , l a s y n t a x e de l a r e q u ê t e e s t i n v a l i d e ” 16 . ” pour l e d r i v e r u t i l i s é . . . ) ” ;

17 } e l s e {

18 // L i a i s o n de v a r i a b l e s a v e c l e s ” ?” de l a r e q u ê t e pr é par é e : 19 // Le premier paramètre de bindParam e s t i c i l e numé ro du ” ?”

20 // en commenç ant par 1 .

21 // Lors de l ’ ex é c u t i o n de l a r e q u ê t e , chaque ” ?” s e r a remplac é par 22 // l e contenu de l a v a r i a b l e c o r r e s p o n d a n t e .

23 $statement−>bindParam (1 , $id ) ;

24 $statement−>bindParam (2 , $numeroRue ) ;

25 $statement−>bindParam (3 , $rue ) ;

26 $statement−>bindParam (4 , $complementAddr ) ;

27 $statement−>bindParam (5 , $codePostal ) ;

28 $statement−>bindParam (6 , $ v i l l e ) ; 29 $statement−>bindParam (7 , $pays ) ; 30

31 // Ré cup é r a t i o n d e s donn é e s du f o r m u l a i r e s e t a f f e c t a t i o n d e s v a r i a b l e s 32 // $numeroRue , $rue , $complementAddr , $ c o d e P o s t a l , $ v i l l e , $pays

33 // à p a r t i r d e s donn é e s u t i l i s a t e u r ( t a b l e a u $_POST)

34 require ( dirname (__FILE__) . ’ / e x 0 6 _ r e t r i e v e I n p u t P o s t s . php ’ ) ;

35

36 // Géné r a t i o n d ’ un $ i d d i f f i c i l e à d e v i n e r .

37 $ i d = hash ( ” sha512 ” , $numeroRue . $ r u e . $complementAddr . $ c o d e P o s t a l . $ v i l l e . $pays ) ;

38 $ i d = substr ( $id , 0 , 1 0 ) ; // r e s p e c t de l a forme d e s ID (10 c h i f f r e s hexa ) 39

40 // Exé c u t i o n de l a r e q u ê t e . ( Tous l e s ” ?” de l a r e q u ê t e ont é t é l i é s à d e s v a r i a b l e s )

41 i f ( $statement−>execute ( ) === f a l s e ) {

42 $ d a t a E r r o r [ ” e x e c u t e−query ” ] = ” Problème d ’ ex é cution de l a requ ê t e . ”

43 . ” ( par exemple , une l i g n e a v e c c e t t e c l é p r i m a i r e $ i d e x i s t e d é j à . . . )

” ;

44 }

45 }

46

47 // Appel de l a vue ( ou vue d ’ e r r e u r ) 48 i f ( !empty( $ d a t a E r r o r ) ) {

49 require ( ” v u e E r r e u r . php ” ) ;

50 } e l s e { // Code de l a vue : 51 require ( ” vueNormale . php ” ) ;

52 }

53 // Fermeture de l a c o nnex i on ( co nnexion non p e r s i s t a n t e ) 54 $ s t a t e m e n t = n u l l ;

55 $dbh = n u l l ; 56 ?>

Voici un autre exemple de requête préparée, avec une requête de type SELECT. Code Source 8.10 : exemples/pdo/ex08_requetesPrepareesSelect.php

1 < ?php

2 // Connexion à l a b a s e de donn é e s :

3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / ex03_connectToDatabasePDO . php ’ ) ; 4

5 // Pr é p a r a t i o n de l a r e q u ê t e ( cha î ne r e p r é s e n t a n t une r e q u ê t e SQL 6 // s a u f que l e s v a l e u r s à i n s é r e r dont d e s ?

8

9 // Test en s u p p o s a n t l e mode de g e s t i o n d e s e r r e u r s PDO : :ERRMODE_SILENT 10 // ( sinon , en mode PDO : :ERRMODE_EXCEPTION i l f a u d r a i t u t i l i s e r t r y . . . c a t c h ) 11 i f ( $ s t a t e m e n t === f a l s e ) {

12 $ d a t a E r r o r [ ’ p r e p a r a t i o n−query ’ ] = ” Problème de pr é paration de l a requ ê t e . ”

13 . ” ( par exemple , l a s y n t a x e de l a r e q u ê t e e s t i n v a l i d e ” 14 . ” pour l e d r i v e r u t i l i s é . . . ) ” ;

15 } e l s e {

16 // L i a i s o n de l a v a r i a b l e $_GET[ ’ c o d e P o s t a l ’ ] a v e c l e ” ?” de l a r e q u ê t e : 17 // Le premier paramètre de bindParam e s t i c i l e numé ro du ” ?” , à s a v o i r 1 18 $statement−>bindParam (1 , $_GET[ ’ codePostal ’ ] ) ;

19 // Test d ’ e r r e u r en s u p p o s a n t l e mode de g e s t i o n d e s e r r e u r s PDO : : ERRMODE_SILENT

20 // ( sinon , a v e c l e mode PDO : :ERRMODE_EXCEPTION i l f a u d r a i t u t i l i s e r a v e c t r y . . . c a t c h )

21 i f ( $statement−>execute ( ) === f a l s e ) { // Code de l a vue :

22 $ d a t a E r r o r [ ” e x e c u t e−query ” ] = ” Problème d ’ ex é cution de l a requ ê t e . ” ;

23 }

24 }

25

26 // Appel de l a vue ( ou vue d ’ e r r e u r ) 27 i f ( !empty( $ d a t a E r r o r ) ) {

28 require ( ” v u e E r r e u r . php ” ) ;

29 } e l s e { // Code de l a vue : 30

31 r e q u i r e _ o n c e ( ’ c l a s s e s / VueHtmlUtils . php ’ ) ;

32 echo CoursPHP\Vue\ VueHtmlUtils : :enTeteHTML5 ( ”Requ ê t e s Pr é par é e s ” ,

33 ’UTF−8 ’ , ’ myStyle . c s s ’ ) ;

34 echo ”<h1>Requ ê t e s Pr é par é e s ( 2 ) ( Donnez un Code P o s t a l )</h1>” ;

35 // A f f i c h a g e d e s r é s u l t a t s de l a r e q u ê t e 36 foreach ( $ s t a t e m e n t a s $row ) {

37 echo ”<p>” ;

38 echo $row [ ’ numeroRue ’ ] . ” , ” . $row [ ’ rue ’ ] . ” , ” ;

39 i f ( !empty( $row [ ’ complementAddr ’ ] ) )

40 echo $row [ ’ complementAddr ’ ] . ” , ” ;

41 echo $row [ ’ c o d e P o s t a l ’ ] . ” ” ;

42 echo $row [ ’ v i l l e ’ ] . ” ” ;

43 echo $row [ ’ pays ’ ] ;

44 echo ”</p>” ;

45 }

46 echo CoursPHP\Vue\ VueHtmlUtils : :finFichierHTML5 ( ) ;

47 }

48 // Fermeture de l a c o nnex i on ( co nnexion non p e r s i s t a n t e ) 49 $ s t a t e m e n t = n u l l ;

50 $dbh = n u l l ; 51 ?>

8.3.3 Syntaxe avec des :name

Un autre syntaxe consiste à donner des noms aux variables à substituer, au lieu des points d’interrogation ”?” qui sont anonymes. La syntaxe avec les ”?” repose sur l’ordre des variables dans un tableau indexé, et il y a plus de risque de se mélanger les pinceaux. Dans la syntaxe avec des :name, chaque :quelqueChose dans la requête devra être liée (avec bindParam) à une variable (ou élément de tableau).

Code Source 8.11 : exemples/pdo/ex09_requetesPrepareesV2.php

1 < ?php

2 // Connexion à l a b a s e de donn é e s

3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / ex03_connectToDatabasePDO . php ’ ) ; 4

5 // Pr é p a r a t i o n de l a r e q u ê t e ( cha î ne r e p r é s e n t a n t une r e q u ê t e SQL 6 // s a u f que l e s v a l e u r s à i n s é r e r dont d e s ?)

7 $ s t a t e m e n t = $dbh−>prepare ( ’REPLACE INTO Adresse ( idAdresse , numeroRue , rue , ’

8 . ’ complementAddr , c o d e P o s t a l , v i l l e , pays ) ’

9 . ’VALUES ( : i d A d r e s s e , :numeroRue , :rue , ’

10 . ’ :complementAddr , :c o d e P o s t a l , : v i l l e , :pays ) ’

11 ) ;

12

13 // Test en s u p p o s a n t l e mode de g e s t i o n d ’ e r r e u r s PDO : :ERRMODE_SILENT

14 // ( sinon , en mode PDO : :ERRMODE_EXCEPTION i l f a u d r a i t u t i l i s e r t r y . . . c a t c h ) 15 i f ( $ s t a t e m e n t === f a l s e ) {

16 $ d a t a E r r o r [ ’ p r e p a r a t i o n−query ’ ] = ” Problème de pr é paration de l a requ ê t e . ”

17 . ” ( par exemple , l a s y n t a x e de l a r e q u ê t e e s t i n v a l i d e ” 18 . ” pour l e d r i v e r u t i l i s é . . . ) ” ; 19 } e l s e { 20 // Cré a t i o n d ’ un t a b l e a u a s s o c i a t i f a v e c l e s v a l e u r s : 21 $i n pu t A rr a y = array ( 22 ” i d A d r e s s e ” => ” 0123456788 ” , 23 ”numeroRue” => ”2 b i s ” ,

24 ” rue ” => ”Rue de l a Paix ” ,

25 ” complementAddr ” => ”Ré s i d . \” Les F l o t s \” ” ,

26 ” c o d e P o s t a l ” => ” 63000 ” ,

27 ” v i l l e ” => ” Clermont−Ferrand ” ,

28 ” pays ” => ” France ” ) ;

29 // L i a i s o n de v a r i a b l e s ” : q u e l q u e C h o s e ” de l a r e q u ê t e pr é par é e :

30 // Lors de l ’ ex é c u t i o n de l a r e q u ê t e , chaque ” : q u e l q u e C h o s e ” s e r a remplac é par

31 // l e contenu de l a v a r i a b l e c o r r e s p o n d a n t e $ i n p u t A r r a y [ ” q u e l q u e C h o s e ” ] . 32 $statement−>bindParam ( ” :idAdresse ” , $inputArray [ ” idAdresse ” ] ) ;

33 $statement−>bindParam ( ” :numeroRue” , $inputArray [ ”numeroRue” ] ) ;

34 $statement−>bindParam ( ” :rue ” , $inputArray [ ” rue ” ] ) ;

35 $statement−>bindParam ( ” :complementAddr” , $inputArray [ ”complementAddr” ] ) ;

36 $statement−>bindParam ( ” :codePostal ” , $inputArray [ ” codePostal ” ] ) ;

37 $statement−>bindParam ( ” : v i l l e ” , $inputArray [ ” v i l l e ” ] ) ; 38 $statement−>bindParam ( ” :pays ” , $inputArray [ ” pays ” ] ) ; 39

40 // Exé c u t i o n de l a r e q u ê t e .

41 // ( Tous l e s ” : q u e l q u e C h o s e ” de l a r e q u ê t e ont é t é l i é s à d e s v a r i a b l e s ) 42 i f ( $statement−>execute ( ) === f a l s e ) {

43 $ d a t a E r r o r [ ” e x e c u t e−query ” ] = ” Problème d ’ ex é cution de l a requ ê t e . ”

44 . ” ( par exemple , une l i g n e a v e c c e t t e c l é p r i m a i r e ” 45 . $ i n p u t A rr a y [ ” i d A d r e s s e ” ] . ” e x i s t e d é j à . . . ) ” ;

46 }

47 }

48

49 // Appel de l a vue ( ou vue d ’ e r r e u r ) 50 i f ( !empty( $ d a t a E r r o r ) ) {

51 require ( ” v ue Err e u r . php ” ) ;

52 } e l s e { // Code de l a vue : 53 require ( ” vueNormale . php ” ) ;

55 // Fermeture de l a c o nnex i on ( co nnexion non p e r s i s t a n t e ) 56 $ s t a t e m e n t = n u l l ;

57 $dbh = n u l l ; 58 ?>

L’un des avantages de la syntaxe avec des :name est de permettre une automatisation aisée de la préparation et de l’exécution de la requête à partir d’un tableau associatif contenant les valeurs. Dans l’exemple suivant le tableau associatif contient les attributs d’une Adresse. On pourrait aussi lier et exécuter automatiquement la requête à partir d’un tableau $_REQUEST directement issu d’un formulaire.

Code Source 8.12 : exemples/pdo/ex10_requetesPrepareesV3.php

1 < ?php

2 // Connexion à l a b a s e de donn é e s

3 r e q u i r e _ o n c e ( dirname (__FILE__) . ’ / ex03_connectToDatabasePDO . php ’ ) ; 4

5 // La r e q u ê t e à pr é p a r e r a v e c d e s ” : q u e l q u e C h o s e ” à l a p l a c e d e s v a l e u r s 6 $ r e q u e t e = ’REPLACE INTO Adresse ( i d A d r e s s e , numeroRue , rue , ’

7 . ’ complementAddr , c o d e P o s t a l , v i l l e , pays ) ’

8 . ’VALUES ( : i d A d r e s s e , :numeroRue , :rue , ’

9 . ’ :complementAddr , :c o d e P o s t a l , : v i l l e , :pays ) ’ ; 10 11 // Pr é p a r a t i o n de l a r e q u ê t e ( cha î ne r e p r é s e n t a n t une r e q u ê t e SQL 12 // s a u f que l e s v a l e u r s à i n s é r e r dont d e s ?) 13 $ s t a t e m e n t = $dbh−>prepare ( $requete ) ; 14

15 // Test en s u p p o s a n t l e mode de g e s t i o n d ’ e r r e u r s PDO : :ERRMODE_SILENT

16 // ( sinon , en mode PDO : :ERRMODE_EXCEPTION i l f a u d r a i t u t i l i s e r t r y . . . c a t c h ) 17 i f ( $ s t a t e m e n t === f a l s e ) {

18 $ d a t a E r r o r [ ’ p r e p a r a t i o n−query ’ ] = ” Problème de pr é paration de l a requ ê t e . ” ;

19 } e l s e { 20 // Cré a t i o n d ’ un t a b l e a u a s s o c i a t i f a v e c l e s v a l e u r s : 21 $i n pu t A rr a y = array ( 22 ” i d A d r e s s e ” => ” 9876543211 ” , 23 ”numeroRue” => ”2 Ter ” , 24 ” rue ” => ”Rue de l a Sé r é n i t é ” ,

25 ” complementAddr ” => ”Compl é ment u t i l e ” ,

26 ” c o d e P o s t a l ” => ” 63001 ” ,

27 ” v i l l e ” => ” Clermont−Ferrand ” ,

28 ” pays ” => ” France ” ) ;

29 // L i a i s o n de v a r i a b l e s ” : q u e l q u e C h o s e ” de l a r e q u ê t e pr é par é e :

30 // Lors de l ’ ex é c u t i o n de l a r e q u ê t e , chaque ” : q u e l q u e C h o s e ” s e r a remplac é par

31 // l e contenu de l a v a r i a b l e c o r r e s p o n d a n t e $ i n p u t A r r a y [ ” q u e l q u e C h o s e ” ] . 32

33 // 1) On r e c h e r c h e dans l a r e q u e t e l e s cha î nes de l a forme ” : q u e l q u e C h o s e ” 34 preg_match_all ( ” /\ :[ a−zA−Z ] [ a−zA−Z0−9]+/” , $requete ,

35 $ k e y C o l l e c t i o n , PREG_PATTERN_ORDER) ;

36 // On p a r c o u r s l e s arguments de l a r e q u ê t e 37 foreach ( $ k e y C o l l e c t i o n [ 0 ] a s $key ) {

38 $ a s s o c i a t i v e K e y = substr ( $key , 1 ) ; // c l é dans l e t a b l e a u $ a r g s 39 $statement−>bindParam ( $key , $inputArray [ $ a s s o c i a t i v e K e y ] ) ;

40 }

41

42 // Exé c u t i o n de l a r e q u ê t e .

44 i f ( $statement−>execute ( ) === f a l s e ) {

45 $ d a t a E r r o r [ ” e x e c u t e−query ” ] = ” Problème d ’ ex é cution de l a requ ê t e . ”

46 . ” ( par exemple , une l i g n e a v e c c e t t e c l é p r i m a i r e ” . 47 $i npu t A rr a y [ ’ i d A d r e s s e ’ ] . ” e x i s t e d é j à . . . ) ” ;

48 }

49 }

50

51 // Appel de l a vue ( ou vue d ’ e r r e u r ) 52 i f ( !empty( $ d a t a E r r o r ) ) {

53 require ( ” v ue Err e u r . php ” ) ;

54 } e l s e { // Code de l a vue : 55 require ( ” vueNormale . php ” ) ;

56 }

57 // Fermeture de l a c o nnex i on ( co nnexion non p e r s i s t a n t e ) 58 $ s t a t e m e n t = n u l l ;

59 $dbh = n u l l ; 60 ?>

Couche d’Accès aux données (DAL)

9.1 Diagrammes de Conception

Data Access Layer et pkg Auth

Persistance Metier

Auth

AdresseFabrique

+ getValidInstance(out dataError : string 0..*, inputArray : array&, policy : const int) : Adresse + validateInstance(out dataError : string 0..*,

inOut adresse : Adresse) : void

«Singleton»

DataBaseManager

- instance : DataBaseManager

+ getInstance() : DataBaseManager {throws Exception} + prepareAndExecuteQuery(requete : string, args : array&=null

) : array()|boolean {throws Exception} + prepareAndExecuteQueryAssoc(requete : string, args : array&=null

) : array()|boolean {throws Exception}

- getAuthData(Out db_host, Out db_name, Out db_user, Out db_password) : void - DataBaseManager() {throws Exception}

«POPO»

Adresse AdresseGateway

+ getAdresseById(inOut dataError : string 0..*,

idAdresse : string) : Adresse {throws Exception}

+ getAdresseAll(inOut dataError : string 0..*) : Adresse 0..* {throws Exception} + createAdresse(Out dataError : string 0..*,

inputArray : array&) : Adresse {throws Exception} + updateAdresse(Out dataError : string 0..*,

inputArray : array&) : Adresse {throws Exception} + deleteAdresse(inOut dataError : string 0..*

idAdresse : string) : Adresse {throws Exception}

SessionUtils

+ createSession(email : string, role : string=”visitor”) : void + generateSessionId() : string

AuthUtils

+ isStrongPassword(wouldBePassword : string) : boolean

PDO PDOStatement uses uses uses dbh 1 uses uses

Dans le document cours poo php pas à pas (Page 141-150)

Documents relatifs