BTS S.I.O. 2012-2013 PHP OBJET Module SLAM4 Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais
Table des matières 1 But... 3 2 Les bases :... 3 3 Utilisation d'une classe : Instanciation...3 4 Auto-chargement des classes :...3 5 Accès aux données avec PDO (PHP DATA OBJECT)...3 5.1 Présentation de PDO... 3 5.2 Connexion a une base de données :...3 5.3 Exécution d'une requête :... 4 5.4 Gestion des erreurs :... 5 5.5 Travail à réaliser avec PDO :... 5 PHPRévisionObjetV2.odt Module SLAM4 2 / 6
1 But A partir des connaissances acquises lors du module Slam2, se familiariser avec la programmation objet en PHP. Cette familiarisation est obligatoire avant l'étude des frameworks PHP. Le support de cours sera pris sur internet (site du zero cours de Mr Victor Thuillier). Afin d'être le plus efficace possible, vous serez guidés dans l'analyse du document. Afin d'être actif coder le maximum d'exemples en les enrichissants de données personnelles. 2 Les bases : Comment créer une classe en PHP? Encapsulation : les mots clés qui définissent la visibilité. Attributs : notation a respecter (PEAR) Définition des méthodes. 3 Utilisation d'une classe : Instanciation Mot clé pour instancier une classe. Comment accéder aux attributs. Comment accéder aux méthodes. Passage de paramètres. Codage des accesseurs (Set,Get). Utilisation des constructeurs. Attributs et méthodes static, opérateurs de résolution de portée. 4 Auto-chargement des classes : Utiliser le chargement manuel du fichier contenant la classe. Étudier et mettre en œuvre le mécanisme propre a PHP de l'auto-chargement de classes. 5 Accès aux données avec PDO (PHP DATA OBJECT) 5.1 Présentation de PDO L'extension PHP Data Objects (PDO) définit une interface pour accéder à une base de données depuis PHP. Chaque pilote de base de données implémenté dans l'interface PDO peut utiliser des fonctionnalités spécifiques de chacune des bases de données en utilisant des extensions de fonctions. Il faut utiliser un driver PDO spécifique à la base de données pour accéder au serveur de base de données. PDO (comme ODBC sous Windows) fournit une interface d'abstraction à l'accès de données, ce qui signifie que vous utilisez les mêmes fonctions pour exécuter des requêtes ou récupérer les données quelque soit la base de données utilisée. PDO ne fournit pas une abstraction de base de données : il ne réécrit pas le SQL. 5.2 Connexion a une base de données : Vérifier que PDO est pris en charge sur votre installation de PHP. PHPRévisionObjetV2.odt Module SLAM4 3 / 6
Créer la même table dans MySql et SqlServeur. Créer un script de connexion sur MySql. Créer un script de connexion sur SqlServeur. Les connexions sont établies en créant des instances de la classe de base de PDO. Peut importe quel driver vous voulez utiliser ; vous utilisez toujours le nom de la classe PDO. Le constructeur accepte des paramètres pour spécifier la source de la base de données (connue en tant que DSN) et optionnellement, le nom d'utilisateur et le mot de passe (s'il y en a un). Il suffit pour cela d'exécuter la commande : $dbh = new PDO("type_de_base:host=machine_qui_héberge_la_base;dbname=nom_de_la_base", "nom_d_utilisateur", "mot_de_passe) ; Le type_de_base est une valeur parmi : mssql (FreeTDS/Microsoft SQL Server/Sybase), firebird (Firebird/Interbase 6), informix (IBM Informix Dynamic Server), mysql (MySQL 3.x/4.x/5.x), oci (Oracle Call Interface), odbc (ODBC v3 --IBM DB2 unixodbc et win32 ODBC--)), pgsql (PostgreSQL), sqlite (SQLite 3 et SQLite 2). Lorsque la connexion à la base de données a réussi, une instance de la classe PDO est retournée à votre script. La connexion est active tant que l'objet PDO l'est. Pour clore la connexion, vous devez détruire l'objet en vous assurant que toutes ses références sont effacées. Vous pouvez faire cela en assignant NULL à la variable gérant l'objet. Si vous ne le faites pas explicitement, PHP fermera automatiquement la connexion lorsque le script arrivera à la fin. 5.3 Exécution d'une requête : Après avoir obtenu un objet connexion $dbh (instance de la classe de base de PDO) la syntaxe est simple : $result = $dbh->query(votre_requête) ; La valeur renvoyée (rangée ici dans la variable $result) N'EST PAS le résultat de l'exécution de la requête, mais un objet qui vous permet d'accéder aux résultats grâce aux méthodes d'instance décrites ci-dessous. Exemples d'utilisation : Obtenir le nombre de lignes et de colonnes du résultat d'une requête de type SELECT : $result = $dbh->query('select id FROM table') ; echo $result->rowcount() ; // nombre de lignes echo $result->columncount() ; // nombre de champs Accès aux résultats d'une requête : $result étant un résultat valide renvoyé par $dbh->query(), $result->fetchall() renvoie un tableau à 2 dimensions qui contient les résultats: le premier indice concerne les lignes, le deuxième concerne les colonnes. PHPRévisionObjetV2.odt Module SLAM4 4 / 6
Accès par le nom des colonnes $result = $dbh->query("select * FROM villes"); $data = $result->fetchall(); foreach ( $data as $row ) { echo $row["codepostal"]." - ".$row["ville"]."<br />\n"; Accès par le numéro des colonnes : $result = $dbh->query("select * FROM villes"); $data = $result->fetchall(); foreach ( $data as $row ) { for ($i=0 ; $i<$result->columncount() ; $i++) { echo $row[$i]." ** "; echo "<br />\n"; Accès par le numéro des lignes et le numéro des colonnes (boucles imbriquées) $result = $dbh->query("select * FROM villes"); $data = $result->fetchall(); for ($l=0;$l<$result->rowcount();$l++) { for ($i=0;$i<$result->columncount();$i++) { echo $data[$l][$i]." ** "; echo "<br />\n"; 5.4 Gestion des erreurs : Quand une instruction PDO échoue, aucun message n'est affiché. On peut croire à tort que tout s'est bien passé. Il est donc important de savoir obtenir des informations sur d'éventuelles erreurs. La méthode $db->errorcode() renvoie le code d'erreur associé avec la dernière opération effectuée sur la base de données. Sa valeur est 0 (zéro) si il n'y a pas eu d'erreur. Pour gérer les éventuelles erreurs, les méthodes précédentes peuvent être utilisée de cette façon (ici on exécute une requête $req définie par ailleurs) : Exemple de traitement : $dbh->query($req); // exécution de la requête if ($dbh->errorcode()!=0) { // il y a une erreur echo "<b>erreur</b> sur la requête <tt>$req</tt><br />\n"; $t=$dbh->errorinfo(); // récupération des informations sur l'erreur echo "<b>code erreur SQLSTATE :</b> ".$t[0]."<br />\n"; echo "<b>code erreur spécifique au driver :</b> ".$t[1]."<br />\n"; echo "<b>message d'erreur :</b><blockquote><p>".$t[2]."</p></blockquote>\n"; echo "<b>le programme a été interrompu</b>"; die(); Comme dans les autres langages il est préférable de mettre en place un gestionnaire d'exception et traiter les requête a l'intérieur d'un bloc «try...catch» Pour plus de précisions : http://fr.php.net/manual/fr/pdo.error-handling.php 5.5 Travail à réaliser avec PDO : à partir de l'article :http://www.siteduzero.com/tutoriel-3-34790-pdo-interface-d-acces-aux-bdd.html créer votre propre classe d'accès a une base de donnée et mettre en création, lecture, mise a jour et destruction. Choisir une table nom, prénom et numéro de téléphone. S'inspirer pour cela des exemples fournis dans le polycopié de Mr Victor Thuillier. PHPRévisionObjetV2.odt Module SLAM4 5 / 6
Aide possible : http://studio.jacksay.com/tutoriaux/php/connection-mysql-avec-pdo Me faire parvenir votre travail à : pierre.barais@ltpdampierre (archive de projet netbeans compressé 7z). PHPRévisionObjetV2.odt Module SLAM4 6 / 6