Formation php pdo

697 vues

Publié le

Formation sur l'objet PDO de PHP

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
697
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
122
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Formation php pdo

  1. 1. Programmation Web 2015Programmation Web 2015 11 PHP PDOPHP PDO Les BasesLes Bases Souhaibou SallaSouhaibou Salla Souhaibou36@yahoo.frSouhaibou36@yahoo.fr Développeur PHP & MySQLDéveloppeur PHP & MySQL : :// . .Site http www alphorm com : :// . .Blog http blog alphorm com : :// . .Forum http forum alphorm com Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  2. 2. Programmation Web 2015Programmation Web 2015 22 PLANPLAN • Présentation du formateurPrésentation du formateur • Publics concernésPublics concernés • Connaissances requisesConnaissances requises • Qu’est ce que PDOQu’est ce que PDO • Pourquoi PDOPourquoi PDO • Plan de formationPlan de formation • Liens des ressources utilesLiens des ressources utiles Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  3. 3. Programmation Web 2015Programmation Web 2015 33 Qui suis-jeQui suis-je •Souhaibou SallaSouhaibou Salla •Développeur PHP MySQL (4 ans)Développeur PHP MySQL (4 ans) •Responsable Informatique dans uneResponsable Informatique dans une société & Développeur freelancesociété & Développeur freelance •Mes référencesMes références •LinkedIn :LinkedIn : •Alphorm :Alphorm : •Me contacterMe contacter •souhaibou36@yahoo.frsouhaibou36@yahoo.fr Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  4. 4. Programmation Web 2015Programmation Web 2015 44 Publics ConcernésPublics Concernés •Développeur PHPDéveloppeur PHP •PassionnésPassionnés •Administrateur base de donnéesAdministrateur base de données •Les curieuxLes curieux Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  5. 5. Connaissances requisesConnaissances requises  Maitrisez PHP + 1base de donnéesMaitrisez PHP + 1base de données  Maitrisez la programmation orienté objet en PHPMaitrisez la programmation orienté objet en PHP 55Programmation Web 2013-2014Programmation Web 2013-2014 Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  6. 6. 66Programmation Web 2015Programmation Web 2015 PDOPDO  PDO :PDO : PPHPHP DDataata OObjectsbjects  Extension PHP fournissant une interface pourExtension PHP fournissant une interface pour accéder à une base de donnéesaccéder à une base de données  Fournit une interface d'Fournit une interface d'abstraction pour l'accèsabstraction pour l'accès aux donnéesaux données  Ne fournitNe fournit PASPAS uneune abstraction de base deabstraction de base de donnéesdonnées  SQL spécifique au moteurSQL spécifique au moteur  Fonctionnalités présentes / absentesFonctionnalités présentes / absentes  Interface orientée objetInterface orientée objet Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  7. 7. Bases de données supportéesBases de données supportées Nom du driverNom du driver Bases de données supportéesBases de données supportées PDO_DBLIBPDO_DBLIB FreeTDS / Microsoft SQL Server / SybaseFreeTDS / Microsoft SQL Server / Sybase PDO_FIREBIRDPDO_FIREBIRD Firebird/Interbase 6Firebird/Interbase 6 PDO_IBMPDO_IBM IBM DB2IBM DB2 PDO_INFORMIXPDO_INFORMIX IBM Informix Dynamic ServerIBM Informix Dynamic Server PDO_MYSQLPDO_MYSQL MySQL 3.x/4.x/5.xMySQL 3.x/4.x/5.x PDO_OCIPDO_OCI Oracle Call InterfaceOracle Call Interface PDO_ODBCPDO_ODBC ODBC v3 (IBM DB2, unixODBC et win32 ODBC)ODBC v3 (IBM DB2, unixODBC et win32 ODBC) PDO_PGSQLPDO_PGSQL PostgreSQLPostgreSQL PDO_SQLITEPDO_SQLITE SQLite 3 et SQLite 2SQLite 3 et SQLite 2 PDO_4DPDO_4D 4D4D 77Programmation Web 2015Programmation Web 2015 Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  8. 8. 88Programmation Web 2015Programmation Web 2015 Classes prédéfiniesClasses prédéfinies  PDOPDO :: connexion PHP / base de donnéesconnexion PHP / base de données  __construct()__construct()  exec(), prepare(), query()exec(), prepare(), query()  errorCode(), errorInfo()errorCode(), errorInfo()  getAttributes(), setAttribute()getAttributes(), setAttribute()  lastInsertId(), quote()lastInsertId(), quote()  beginTransaction()beginTransaction()  commit(), rollBack()commit(), rollBack()  getAvailableDrivers()getAvailableDrivers() Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  9. 9. 99Programmation Web 2015Programmation Web 2015 Classes prédéfiniesClasses prédéfinies  PDOStatementPDOStatement :: requête préparée, jeu de résultatsrequête préparée, jeu de résultats  bindColumn(), bindParam(), bindValue(),bindColumn(), bindParam(), bindValue(), closeCursor()closeCursor()  errorCode(), errorInfo()errorCode(), errorInfo()  fetch(), fetchAll(), fetchColumn(), fetchObject(),fetch(), fetchAll(), fetchColumn(), fetchObject(), setFetchMode(), nextRowset()setFetchMode(), nextRowset()  rowCount(), columnCount(), getColumnMeta()rowCount(), columnCount(), getColumnMeta()  getAttribute(), setAttribute()getAttribute(), setAttribute()  execute()execute()  debugDumpParams()debugDumpParams() Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  10. 10. 1010Programmation Web 2015Programmation Web 2015 Connexions et gestionnaire de connexionConnexions et gestionnaire de connexion  Instanciation d'un objetInstanciation d'un objet PDOPDO  $dbh=new$dbh=new PDOPDO((DSNDSN [,[, useruser [,[, passpass [,[, optionsoptions]]]);]]]);  DSNDSN :: DDataata SSourceource NNameame  nom_du_driver:syntaxe_spécifique_au_drivernom_du_driver:syntaxe_spécifique_au_driver  Ex :Ex : mysql:host=localhost;dbname=ma_basemysql:host=localhost;dbname=ma_base  useruser : nom d'utilisateur,: nom d'utilisateur, passpass : mot de passe: mot de passe  optionsoptions : tableau associatif: tableau associatif  spécifiques au driverspécifiques au driver  Ex : array(PDO::ATTR_PERSISTENT => true)) ;Ex : array(PDO::ATTR_PERSISTENT => true)) ;  Fin de connexion : $dbh=null ; ou unset($dbh) ;Fin de connexion : $dbh=null ; ou unset($dbh) ; Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  11. 11. 1111Programmation Web 2015Programmation Web 2015 Gestion des erreurs de connexionGestion des erreurs de connexion  Connexion par construction d'un objetConnexion par construction d'un objet  Gestion envisageable des erreursGestion envisageable des erreurs  AucuneAucune  Fin brutale (exit, die)Fin brutale (exit, die)  ÉtatÉtat  ExceptionException  En cas d'erreur de connexionEn cas d'erreur de connexion  ObjetObjet PDOExceptionPDOException lancélancé  PDOExceptionPDOException hérite de Exceptionhérite de Exception Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  12. 12. 1212Programmation Web 2015Programmation Web 2015 Gestion des erreurs de connexionGestion des erreurs de connexion <?php<?php trytry {{ $$dbhdbh == newnew PDOPDO((''mysql:host=h;dbname=dbmysql:host=h;dbname=db',', $$useruser,, $$passpass)) ;; …… $$dbhdbh == nullnull ;; }} catchcatch ((PDOExceptionPDOException $$ee)) {{ echoecho ""Erreur:Erreur: "".$.$ee->->getMessagegetMessage()()..""<br/><br/>"" ;; diedie()() ;; }} ?>?> Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  13. 13. 1313Programmation Web 2015Programmation Web 2015 Gestion des erreurs (hormis connexion)Gestion des erreurs (hormis connexion)  PDO::ERRMODE_SILENTPDO::ERRMODE_SILENT ((par défautpar défaut))  ModeMode silencieuxsilencieux, mise en place d'un, mise en place d'un code d'erreurcode d'erreur  PDO :PDO : errorCodeerrorCode() /() / errorInfoerrorInfo()()  PDOStatement :PDOStatement : errorCodeerrorCode() /() / errorInfoerrorInfo()()  PDO::ERRMODE_WARNINGPDO::ERRMODE_WARNING  Mise en place duMise en place du code d'erreurcode d'erreur  Émission d'une erreur de typeÉmission d'une erreur de type E_WARNINGE_WARNING  PDO::ERRMODE_EXCEPTIONPDO::ERRMODE_EXCEPTION  Mise en place duMise en place du code d'erreurcode d'erreur  ObjetObjet PDOExceptionPDOException lancélancé
  14. 14. 1414Programmation Web 2015Programmation Web 2015 Gestion des erreurs (hormis connexion)Gestion des erreurs (hormis connexion) <?php<?php trytry {{ $$dbhdbh == newnew PDOPDO((''mysql:host=h;dbname=dbmysql:host=h;dbname=db',', $$useruser,, $$passpass)) ;; $$dbhdbh->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; …… $$dbhdbh == nullnull ;; }} catchcatch ((PDOExceptionPDOException $$ee)) {{ echoecho ""Erreur:Erreur: "".$.$ee->->getMessagegetMessage()()..""<br/><br/>"" ;; diedie()() ;; }} ?>?> Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  15. 15. 1515Programmation Web 2015Programmation Web 2015 Gestion des erreurs : code d'erreurGestion des erreurs : code d'erreur <?php<?php $$pdopdo == newnew PDOPDO((""mysql:host=localhostmysql:host=localhost"")) ;; $$pdostatpdostat == $$pdopdo->->queryquery((""COUCOUCOUCOU"")) ;; ifif (($$pdopdo->->errorCodeerrorCode())()) {{ echoecho ""ERREUR !!ERREUR !!nn"" ;; echoecho ""<pre><pre>nn"" ;; var_dumpvar_dump(($$pdopdo->->errorInfoerrorInfo())()) ;; echoecho ""</pre></pre>nn"" ;; }} ?>?>ERREUR !!ERREUR !! array(3) {array(3) { [0]=> string(5) "42000"[0]=> string(5) "42000" [1]=> int(1064)[1]=> int(1064) [2]=> string(47) "Erreur de syntaxe près de 'COUCOU' à la ligne 1"[2]=> string(47) "Erreur de syntaxe près de 'COUCOU' à la ligne 1" }} Code SQLSTATECode SQLSTATE Code erreur spécifiqueCode erreur spécifique du driverdu driver Chaîne erreurChaîne erreur spécifique au driverspécifique au driver Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  16. 16. 1616Programmation Web 2015Programmation Web 2015 Gestion des erreurs : exceptionsGestion des erreurs : exceptions <?php<?php trytry {{ $$pdopdo == newnew PDOPDO((""mysql:host=localhostmysql:host=localhost"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION)) ;; $$pdostatpdostat == $$pdopdo->->queryquery((""COUCOUCOUCOU"")) ;; }} catchcatch ((ExceptionException $$ee)) {{ echoecho ""ERREUR :ERREUR : "".$.$ee->->getMessagegetMessage()() ;; }} ?>?> ERREUR : SQLSTATE[42000]: Syntax error or access violation: 1064ERREUR : SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'COUCOU' à la ligne 1Erreur de syntaxe près de 'COUCOU' à la ligne 1 Code SQLSTATECode SQLSTATE Code erreur spécifiqueCode erreur spécifique du driverdu driver Chaîne erreurChaîne erreur spécifique au driverspécifique au driver Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  17. 17. 1717Programmation Web 2015Programmation Web 2015 Exécution d'une requêteExécution d'une requête  PDOStatementPDOStatement PDO::queryPDO::query (( stringstring statementstatement )) <?php<?php trytry {{ $$pdopdo == newnew PDOPDO((""mysql:host=localhostmysql:host=localhost"")) ;; $$pdostatpdostat == $$pdopdo->->queryquery((""SELECT * FROM clientsSELECT * FROM clients"")) ;; }} catchcatch ((ExceptionException $$ee)) {{ echoecho ""ERREUR :ERREUR : "".$.$ee->->getMessagegetMessage()() ;; }} ?>?> RequêteRequêteRésultat de requêteRésultat de requête Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  18. 18. 1818Programmation Web 2015Programmation Web 2015 Exploitation des résultats d'une requêteExploitation des résultats d'une requête  Récupération des données ligne à ligneRécupération des données ligne à ligne  Une ligne peut être :Une ligne peut être :  un tableau indexéun tableau indexé  un tableau associatifun tableau associatif  un tableau mixte (par défaut)un tableau mixte (par défaut)  un objet anonymeun objet anonyme  un objet d'une classe définie par l'utilisateurun objet d'une classe définie par l'utilisateur  Récupération des données d'une colonneRécupération des données d'une colonne Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  19. 19. 1919Programmation Web 2015Programmation Web 2015 Exploitation des résultats d'une requête (1)Exploitation des résultats d'une requête (1) trytry {{ $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->queryquery((""SELECT * FROM userSELECT * FROM user"")) ;; $$pdostatpdostat->->setFetchModesetFetchMode((PDOPDO::::FETCH_ASSOCFETCH_ASSOC)) ;; foreachforeach (($$pdostatpdostat asas $$ligneligne)) {{ echoecho implodeimplode(('';;',', $$ligneligne))..""<br><br>nn"" ;; }} }} catchcatch ((ExceptionException $$ee)) {{ echoecho ""ERREUR :ERREUR : "".$.$ee->->getMessagegetMessage()() ;; }} Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  20. 20. 2020Programmation Web 2015Programmation Web 2015 Exploitation des résultats d'une requête (2)Exploitation des résultats d'une requête (2) trytry {{ $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->queryquery((""SELECT * FROM userSELECT * FROM user"")) ;; foreachforeach (($$pdostatpdostat->->fetchAllfetchAll((PDOPDO::::FETCH_ASSOCFETCH_ASSOC)) asas $$ligneligne)) {{ echoecho implodeimplode(('';;',', $$ligneligne))..""<br><br>nn"" ;; }} }} catchcatch ((ExceptionException $$ee)) {{ echoecho ""ERREUR :ERREUR : "".$.$ee->->getMessagegetMessage()() ;; }} Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  21. 21. 2121Programmation Web 2015Programmation Web 2015 Exploitation des résultats d'une requête (3)Exploitation des résultats d'une requête (3) trytry {{ $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->queryquery((""SELECT * FROM userSELECT * FROM user"")) ;; whilewhile (($$ligneligne = $= $pdostatpdostat->->fetchfetch((PDOPDO::::FETCH_ASSOCFETCH_ASSOC)))) {{ echoecho implodeimplode(('';;',', $$ligneligne))..""<br><br>nn"" ;; }} }} catchcatch ((ExceptionException $$ee)) {{ echoecho ""ERREUR :ERREUR : "".$.$ee->->getMessagegetMessage()() ;; }} Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  22. 22. 2222Programmation Web 2015Programmation Web 2015 Modes de récupération des données (1)Modes de récupération des données (1)  PDO::FETCH_ASSOCPDO::FETCH_ASSOC  retourner chaque ligne dans unretourner chaque ligne dans un tableau indexé par lestableau indexé par les noms des colonnesnoms des colonnes comme elles sont retournéescomme elles sont retournées dans le jeu de résultats correspondant. Si le jeu dedans le jeu de résultats correspondant. Si le jeu de résultats contientrésultats contient de multiples colonnes avec lede multiples colonnes avec le même nommême nom, PDO::FETCH_ASSOC retourne, PDO::FETCH_ASSOC retourne uneune seule valeur par nom de colonneseule valeur par nom de colonne..  PDO::FETCH_NUMPDO::FETCH_NUM  retournerretourner chaque lignechaque ligne dans undans un tableau indexé par letableau indexé par le numéro des colonnesnuméro des colonnes comme elles sont retournéescomme elles sont retournées dans le jeu de résultats correspondant, endans le jeu de résultats correspondant, en commençant à 0commençant à 0.. Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  23. 23. 2323Programmation Web 2015Programmation Web 2015 Modes de récupération des données (2)Modes de récupération des données (2)  PDO::FETCH_BOTHPDO::FETCH_BOTH  retournerretourner chaque lignechaque ligne dans undans un tableau indexé par lestableau indexé par les noms des colonnesnoms des colonnes ainsi que leurs numérosainsi que leurs numéros, comme, comme elles sont retournées dans le jeu de résultatselles sont retournées dans le jeu de résultats correspondant, encorrespondant, en commençant à 0commençant à 0..  PDO::FETCH_OBJPDO::FETCH_OBJ  retournerretourner chaque lignechaque ligne dans undans un objet avec les nomsobjet avec les noms de propriétés correspondant aux noms des colonnesde propriétés correspondant aux noms des colonnes comme elles sont retournées dans le jeu de résultats.comme elles sont retournées dans le jeu de résultats. Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  24. 24. 2424Programmation Web 2015Programmation Web 2015 Modes de récupération des données (3)Modes de récupération des données (3)  PDO::FETCH_BOUNDPDO::FETCH_BOUND  retournerretourner truetrue etet assigner les valeursassigner les valeurs des colonnesdes colonnes du jeu de résultatsdu jeu de résultats dans les variables PHP auxquellesdans les variables PHP auxquelles elles sont liéeselles sont liées avec la méthodeavec la méthode PDOStatement::bindParam()PDOStatement::bindParam() ou la méthodeou la méthode PDOStatement::bindColumn()PDOStatement::bindColumn()..  PDO::FETCH_CLASS |PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPEPDO::FETCH_CLASSTYPE  retourner une nouvelleretourner une nouvelle instance de la classeinstance de la classe demandéedemandée, liant les colonnes aux propriétés, liant les colonnes aux propriétés nommées dans la classe.nommées dans la classe. Nom de la classe = 1ère colonneNom de la classe = 1ère colonne.. Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  25. 25. 2525Programmation Web 2015Programmation Web 2015 Modes de récupération des données (4)Modes de récupération des données (4)  PDO::FETCH_INTOPDO::FETCH_INTO  met à jour une instance existantemet à jour une instance existante de la classede la classe demandée, liant lesdemandée, liant les colonnes du jeu de résultatscolonnes du jeu de résultats auxaux noms desnoms des propriétés de la classepropriétés de la classe..  PDO::FETCH_LAZYPDO::FETCH_LAZY  retournerretourner chaque lignechaque ligne en tanten tant qu'objet avec les nomsqu'objet avec les noms des attributs correspondant aux noms des colonnesdes attributs correspondant aux noms des colonnes retournées dans le jeu de résultats.retournées dans le jeu de résultats.  PDO::FETCH_LAZY crée lesPDO::FETCH_LAZY crée les noms des attributs denoms des attributs de l'objet comme ils sont rencontrésl'objet comme ils sont rencontrés.. Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  26. 26. 2626Programmation Web 2015Programmation Web 2015 Préparation d'une requêtePréparation d'une requête  DéroulementDéroulement d'une requête SQLd'une requête SQL 1.1. AnalyseAnalyse 2.2. CompilationCompilation 3.3. OptimisationOptimisation 4.4. ExécutionExécution  Exécution répétéeExécution répétée d'une requête :d'une requête : 11++22++33++44  PréparationPréparation d'une requête :d'une requête : 11++22++33  Exécution répétéeExécution répétée d'uned'une requête préparéerequête préparée :: 44  Préparation en fonction de paramètres :Préparation en fonction de paramètres :  AnonymesAnonymes  NommésNommés Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  27. 27. 2727Programmation Web 2015Programmation Web 2015 Préparation d'une requêtePréparation d'une requête  PDOStatementPDOStatement PDO::preparePDO::prepare((stringstring statementstatement [,[, arrayarray driver_optionsdriver_options])])  statementstatement : la requête à préparer. Peut contenir des: la requête à préparer. Peut contenir des paramètres anonymes (paramètres anonymes (??) ou nommés () ou nommés (:nom:nom))  driver_optionsdriver_options : tableau d'options du driver: tableau d'options du driver  retourne un objetretourne un objet PDOStatementPDOStatement qui effectueraqui effectuera l'association des paramètres et exécutera la requêtel'association des paramètres et exécutera la requête $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdostatpdostat == $$pdopdo->->prepareprepare(( ""SELECT * FROM user WHERE User= ?SELECT * FROM user WHERE User= ?"")) ;; Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  28. 28. 2828Programmation Web 2015Programmation Web 2015 Association des paramètres d'une requêteAssociation des paramètres d'une requête  boolbool PDOStatement::bindValuePDOStatement::bindValue((mixed parametermixed parameter,, mixed valuemixed value [,[, int data_typeint data_type])])  parameterparameter : le paramètre (nom ou position [1…n]): le paramètre (nom ou position [1…n])  valuevalue : sa valeur: sa valeur  data_typedata_type : le type de la valeur: le type de la valeur  PDO::PARAM_BOOLPDO::PARAM_BOOL booléen.booléen.  PDO::PARAM_NULLPDO::PARAM_NULL NULL SQL.NULL SQL.  PDO::PARAM_INTPDO::PARAM_INT INTEGER SQL.INTEGER SQL.  PDO::PARAM_STRPDO::PARAM_STR CHAR, VARCHAR ou autre chaîne.CHAR, VARCHAR ou autre chaîne.  PDO::PARAM_LOBPDO::PARAM_LOB "objet large" SQL."objet large" SQL.  boolbool PDOStatement::executePDOStatement::execute([([array parametersarray parameters])])  parametersparameters : tableau associatif ou indexé des valeurs: tableau associatif ou indexé des valeurs Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  29. 29. 2929Programmation Web 2015Programmation Web 2015 Préparation puis exécution d'une requête (1)Préparation puis exécution d'une requête (1) $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->prepareprepare(( ""SELECT * FROM user WHERE User= ?SELECT * FROM user WHERE User= ?"")) ;; $$pdostatpdostat->->bindValuebindValue((11, ', 'rootroot'')) ;; $$pdostatpdostat->->executeexecute()() ;; // Utilisation du résultat// Utilisation du résultat $$pdostatpdostat->->bindValuebindValue((11, ', 'cutronacutrona'')) ;; $$pdostatpdostat->->executeexecute()() ;; // Utilisation du résultat// Utilisation du résultat Préparation de la requêtePréparation de la requêteAssociation d'une valeur au 1Association d'une valeur au 1erer paramètreparamètreExécution de la requêteExécution de la requêteAssociation d'une valeur au 1er paramètreAssociation d'une valeur au 1er paramètreExécution de la requêteExécution de la requête paramètre anonymeparamètre anonyme Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  30. 30. 3030Programmation Web 2015Programmation Web 2015 Préparation puis exécution d'une requête (2)Préparation puis exécution d'une requête (2) $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->prepareprepare(( ""SELECT * FROM user WHERE User= :utilisateurSELECT * FROM user WHERE User= :utilisateur"")) ;; $$pdostatpdostat->->bindValuebindValue(('':utilisateur:utilisateur', '', 'rootroot'')) ;; $$pdostatpdostat->->executeexecute()() ;; // Utilisation du résultat// Utilisation du résultat $$pdostatpdostat->->bindValuebindValue(('':utilisateur:utilisateur', '', 'cutronacutrona'')) ;; $$pdostatpdostat->->executeexecute()() ;; // Utilisation du résultat// Utilisation du résultat Préparation de la requêtePréparation de la requêteAssociation d'une valeur au paramètre nomméAssociation d'une valeur au paramètre nomméExécution de la requêteExécution de la requêteAssociation d'une valeur au paramètre nomméAssociation d'une valeur au paramètre nomméExécution de la requêteExécution de la requête paramètre nomméparamètre nommé Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  31. 31. 3131Programmation Web 2015Programmation Web 2015 Préparation puis exécution d'une requête (3)Préparation puis exécution d'une requête (3) $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->prepareprepare(( ""SELECT * FROM user WHERE User= ?SELECT * FROM user WHERE User= ?"")) ;; $$pdostatpdostat->->executeexecute((arrayarray((''rootroot'')))) ;; // Utilisation du résultat// Utilisation du résultat $$pdostatpdostat->->executeexecute((arrayarray((''cutronacutrona'')))) ;; // Utilisation du résultat// Utilisation du résultat Préparation de la requêtePréparation de la requêteAssociation d'une valeur au 1Association d'une valeur au 1erer paramètreparamètreExécution de la requêteExécution de la requêteAssociation d'une valeur au 1er paramètreAssociation d'une valeur au 1er paramètreExécution de la requêteExécution de la requête paramètre anonymeparamètre anonyme Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  32. 32. 3232Programmation Web 2015Programmation Web 2015 Préparation puis exécution d'une requête (4)Préparation puis exécution d'une requête (4) $$pdopdo==newnew PDOPDO((""mysql:host=localhost;dbname=mysqlmysql:host=localhost;dbname=mysql"")) ;; $$pdopdo->->setAttributesetAttribute((PDOPDO::::ATTR_ERRMODE,ATTR_ERRMODE, PDOPDO::::ERRMODE_EXCEPTIONERRMODE_EXCEPTION));; $$pdostatpdostat == $$pdopdo->->prepareprepare(( ""SELECT * FROM user WHERE User= :utilisateurSELECT * FROM user WHERE User= :utilisateur"")) ;; $$pdostatpdostat->->executeexecute(( arrayarray(('':utilisateur:utilisateur'' =>=> ''rootroot'')))) ;; // Utilisation du résultat// Utilisation du résultat $$pdostatpdostat->->executeexecute(( arrayarray(('':utilisateur:utilisateur'' =>=> ''cutronacutrona'')))) ;; // Utilisation du résultat// Utilisation du résultat Préparation de la requêtePréparation de la requêteAssociation d'une valeur au paramètre nomméAssociation d'une valeur au paramètre nomméExécution de la requêteExécution de la requêteAssociation d'une valeur au paramètre nomméAssociation d'une valeur au paramètre nomméExécution de la requêteExécution de la requête paramètre nomméparamètre nommé Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  33. 33. 3333Programmation Web 2015Programmation Web 2015 Intérêt des requêtes préparéesIntérêt des requêtes préparées  Amélioration des performances en casAmélioration des performances en cas d'exécutions répétéesd'exécutions répétées  Émulation faite par PDO si le driver ne lesÉmulation faite par PDO si le driver ne les supporte pas nativementsupporte pas nativement  Protection automatique des valeurs desProtection automatique des valeurs des paramètres pourparamètres pour interdire les attaques parinterdire les attaques par injection de code SQLinjection de code SQL Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  34. 34. 3434Programmation Web 2015Programmation Web 2015 Attaque par injection SQL ?Attaque par injection SQL ?  Ex : validation d'un login/pass sur un siteEx : validation d'un login/pass sur un site  Requête consistant à trouver un enregistrementRequête consistant à trouver un enregistrement correspondant au couple login/pass fourni parcorrespondant au couple login/pass fourni par l'utilisateurl'utilisateur  SELECTSELECT ** FROMFROM membremembre WHEREWHERE mail='mail='{{$$_GET[_GET[''mailmail'']}]}'' ANDAND passwd='passwd='{{$$_GET[_GET[''passwdpasswd'']}]}''  Et si on essayait de fournir un mot de passe unEt si on essayait de fournir un mot de passe un peu particulier…peu particulier… Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  35. 35. 3535Programmation Web 2015Programmation Web 2015 Exemple concret d'injection SQL (1)Exemple concret d'injection SQL (1) $$pdopdo == newnew PDOPDO((''mysql:host=localhost;dbname=testmysql:host=localhost;dbname=test'')) ;; $$pdostatpdostat == $$pdopdo->->queryquery(($$reqreq == <<<<<<SQLSQL SELECTSELECT ** FROMFROM membremembre WHEREWHERE mail='mail='{{$$_GET[_GET[''mailmail'']}]}'' ANDAND passwd='passwd='{{$$_GET[_GET[''passwdpasswd'']}]}'' SQLSQL )) ;; echoecho ""Requête:Requête:nn$$reqreqnn"" ;; ifif (($$utilisateurutilisateur == $$pdostatpdostat->->fetchfetch())()) echoecho ""BienvenueBienvenue {{$$utilisateurutilisateur[[''nomnom'']}]}"" ;; elseelse echoecho ""Désolé...Désolé..."" ;; Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  36. 36. 3636Programmation Web 2015Programmation Web 2015 Exemple concret d'injection SQL (2)Exemple concret d'injection SQL (2) Saisie de l'utilisateur :Saisie de l'utilisateur :  mail :mail : whateverwhatever  pass :pass : who_cares?who_cares? URL :URL : ?mail=whatever&passwd=who_cares??mail=whatever&passwd=who_cares? Requête:Requête: SELECT *SELECT * FROM membreFROM membre WHERE mail='WHERE mail='whateverwhatever'' AND passwd='AND passwd='who_cares?who_cares?'' Désolé...Désolé... Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  37. 37. 3737Programmation Web 2015Programmation Web 2015 Exemple concret d'injection SQL (3)Exemple concret d'injection SQL (3) Saisie de l'utilisateur :Saisie de l'utilisateur :  mail :mail : whateverwhatever  pass :pass : who_cares?' OR true!='who_cares?' OR true!=' URL :URL : ?mail=whatever&passwd=who_cares?'%20OR%20true!='?mail=whatever&passwd=who_cares?'%20OR%20true!=' Requête:Requête: SELECT *SELECT * FROM membreFROM membre WHERE mail='WHERE mail='whateverwhatever'' AND passwd='AND passwd='who_cares?' OR true!='who_cares?' OR true!=''' Bienvenue JohnBienvenue John Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  38. 38. 3838Programmation Web 2015Programmation Web 2015 Protection contre les injections SQL (1)Protection contre les injections SQL (1) $$pdopdo == newnew PDOPDO((''mysql:host=localhost;dbname=testmysql:host=localhost;dbname=test'')) ;; $$pdostatpdostat == $$pdopdo->->prepareprepare(($$reqreq == <<<<<<SQLSQL SELECTSELECT ** FROMFROM membremembre WHEREWHERE mail=?mail=? ANDAND passwd=?passwd=? SQLSQL )) ;; $$pdostatpdostat->->executeexecute((arrayarray(($$_GET[_GET[''mailmail'']],, $$_GET[_GET[''passwdpasswd'']))])) ;; ifif (($$utilisateurutilisateur == $$pdostatpdostat->->fetchfetch())()) {{ echoecho ""BienvenueBienvenue {{$$utilisateurutilisateur[[''nomnom'']}n]}n"" ;; }} elseelse {{ echoecho ""Désole...Désole...nn"" ;; }} Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  39. 39. 3939Programmation Web 2015Programmation Web 2015 Protection contre les injections SQL (2)Protection contre les injections SQL (2) $$pdopdo == newnew PDOPDO((''mysql:host=localhost;dbname=testmysql:host=localhost;dbname=test'')) ;; $$mailmail == $$pdopdo->->quotequote(($$_GET[_GET[''mailmail''])]) ;; $$passwdpasswd == $$pdopdo->->quotequote(($$_GET[_GET[''passwdpasswd''])]) ;; $$pdostatpdostat == $$pdopdo->->queryquery(($$reqreq == <<<<<<SQLSQL SELECTSELECT ** FROMFROM membremembre WHEREWHERE mail=mail=$$mailmail ANDAND passwd=passwd=$$passwdpasswd SQLSQL )) ;; echoecho ""Requête:Requête:nn$$reqreqnn"" ;; ifif (($$utilisateurutilisateur == $$pdostatpdostat->->fetchfetch())()) {{ echoecho ""BienvenueBienvenue {{$$utilisateurutilisateur[[''nomnom'']}n]}n"" ;; }} elseelse {{ echoecho ""Désole...Désole...nn"" ;; }} Requête:Requête: SELECT *SELECT * FROM membreFROM membre WHERE mail=WHERE mail=''whateverwhatever'' AND passwd=AND passwd=''who_cares?who_cares?' OR true!=' OR true!='''' Désolé...Désolé...
  40. 40. 4040Programmation Web 2015Programmation Web 2015 Protection contre les injections SQL (3)Protection contre les injections SQL (3) mysql_connectmysql_connect((''localhostlocalhost''));; mysql_select_dbmysql_select_db((''testtest''));; $$mailmail == mysql_real_escape_stringmysql_real_escape_string(($$_GET[_GET[''mailmail''])]);; $$passwdpasswd == mysql_real_escape_stringmysql_real_escape_string(($$_GET[_GET[''passwdpasswd''])]);; $$resres == mysql_querymysql_query(($$reqreq == <<<<<<SQLSQL SELECTSELECT ** FROMFROM membremembre WHEREWHERE mail='mail='$$mailmail'' ANDAND passwd='passwd='$$passwdpasswd'' SQLSQL )) ;; ifif ((mysql_num_rowsmysql_num_rows(($$resres)) ==== 11 )) {{ $$utilisateurutilisateur == mysql_fetch_assocmysql_fetch_assoc(($$resres)) ;; echoecho ""BienvenueBienvenue {{$$utilisateurutilisateur[[''nomnom'']}n]}n"" ;; }} elseelse {{ echoecho ""Desole...Desole...nn"" ;; }} Requête:Requête: SELECT *SELECT * FROM membreFROM membre WHERE mail='WHERE mail='whateverwhatever'' AND passwd='AND passwd='who_cares?who_cares?' OR true!=' OR true!='''' Désolé...Désolé... Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©
  41. 41. 4141Programmation Web 2015Programmation Web 2015 TransactionsTransactions  Transactions :Transactions :  Atomicité, Consistance, Isolation et DurabilitéAtomicité, Consistance, Isolation et Durabilité  BEGIN puis COMMIT ou ROLLBACKBEGIN puis COMMIT ou ROLLBACK  Mode PDO par défaut :Mode PDO par défaut :  Chaque requête est validée automatiquementChaque requête est validée automatiquement  PDO::beginTransaction()PDO::beginTransaction()  PDO::commit()PDO::commit()  PDO::rollBack()PDO::rollBack()  Tous les moteurs ne supportent pas lesTous les moteurs ne supportent pas les transactionstransactions  PDOExceptionPDOException Formation PHP PDOFormation PHP PDO alphorm.comalphorm.com™™ ©©

×