PHP /MySQL Interface d'accès aux BDDs PDO. Youssef CHAHIR

Documents pareils
PHP 5. La base de données MySql. A. Belaïd 1

PDO : PHP Data Object 1/13

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

PHP. PHP et bases de données

CREATION WEB DYNAMIQUE

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Pratique et administration des systèmes

PHP 4 PARTIE : BASE DE DONNEES

Introduction à JDBC. Accès aux bases de données en Java

OpenPaaS Le réseau social d'entreprise

1. Base de données SQLite

Notes de cours : bases de données distribuées et repliquées

Stockage du fichier dans une table mysql:

Mysql. Les requêtes préparées Prepared statements

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Olivier Mondet

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Mysql avec EasyPhp. 1 er mars 2006

PHP et les Bases de données - Généralités

Java DataBaseConnectivity

Configurer la supervision pour une base MS SQL Server Viadéis Services

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Le langage SQL (première partie) c Olivier Caron

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Performance web. Mesurer. Analyser. Optimiser. Benjamin Lampérier - Benoît Goyheneche. RMLL Beauvais. 8 Juillet 2015

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Les BASES de DONNEES dans WampServer

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Django et PostgreSQL sous la charge

Modélisation et Gestion des bases de données avec mysql workbench

Attaques applicatives

Bases de données relationnelles

L installation a quelque peu changée depuis les derniers tutos, voici une actualisation.

I. MySQL : Serveur et SGBD

Devoir Data WareHouse

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

SQL Server et Active Directory

Installation et Mise en œuvre de MySQL

Cours Bases de données 2ème année IUT

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Vulnérabilités et sécurisation des applications Web

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Sécurité des applications web. Daniel Boteanu

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Accès aux bases de données

Bases de SQL. Hacks 1-6 CHAPITRE UN

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Programmation Web. Madalina Croitoru IUT Montpellier

WDpStats Procédure d installation

Bases de Données relationnelles et leurs systèmes de Gestion

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Application web de gestion de comptes en banques

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

SQL Historique

SYSTÈMES D INFORMATIONS

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

CREATION d UN SITE WEB (INTRODUCTION)

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Installation d'un serveur FTP géré par une base de données MySQL

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

TP Contraintes - Triggers

Sécurité Informatique. Description. Prérequis. Un petit test avant de commencer s embourber

1 Position du problème

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

TP Programmation Java / JDBC / Oracle

PHP 5.4 Développez un site web dynamique et interactif

IFT3030 Base de données. Chapitre 1 Introduction

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

DOM - Document Object Model

Paginer les données côté serveur, mettre en cache côté client

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Bases de données et fournisseurs de contenu

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Cours: Administration d'une Base de Données

La problématique de la Préservation des Bases de Données. Olivier ROUCHON CINES Groupe PIN Jeudi 7 Octobre

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

2 Serveurs OLAP et introduction au Data Mining

Gestion des utilisateurs et de leurs droits

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Bases de données et sites WEB

Sécurité des bases de données Nicolas Jombart Alain Thivillon

Bases de données Outils de gestion

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

Présentation Windows Azure Hadoop Big Data - BI

Guide d installation de SugarCRM Open Source version 4.5.1

Transcription:

PHP /MySQL Interface d'accès aux BDDs PDO Youssef CHAHIR 1

PLAN Architecture Interface phpmyadmin Créer une interface PHP/MySQL : Établir une connexion Exécuter une requête Gérer les erreurs Exploiter les résultats de la requête Fermer la connexion 2

Architecture d un site web avec MySQL/PHP Navigateur: Interface graphique Rôle : Permettre à l utilisateur de visualiser et d interagir avec l information ; MySQL : Serveur de données Fichiers PHP : Serveur d application Associé à Apache qui se charge de transférer les documents produits sur l Internet. 3

Bases De Données MySQL mysql_connect($host, $user, $pass) MySQLi new mysqli($host, $user, $pass) PostgreSQL pg_connect( host=$host port=$port dbname=$db ) SQLite new sqlite_database( db.sqlite ) 4

La solution PDO Interface commun à plusieurs SGBD. Caractéristiques Performance Avantage de la puissance de PHP 5 Puissance Ecrit en C,==> RAPIDE! Fonctions particulières (pour spécialistes) Facilité Clarté Extension Drivers peuvent être chargés 5

Drivers diponibles Oracle OCI [PDO_OCI] ODBC V3, IBM DB2 [PDO_ODBC] MySQL 3.x [PDO_MYSQL] Postgres [PDO_PGSQL] SQLite 3.x [PDO_SQLITE] Firebird [PDO_FIREBIRD] 6

L interface phpmyadmin Une interface simple et complète pour administrer une base MySQL. Outil écrit en PHP qui permet de: 1. Créer et détruire des bases de données. 2. Créer, détruire, modifier des tables. 3. Consulter le contenu des tables, modifier certaines lignes ou les détruire, etc. 4. Exécuter des requêtes SQL interactivement. 5. Charger des fichiers dans des tables et, réciproquement, récupérer le contenu de tables dans des fichiers ASCII. 7

PLAN Architecture Interface phpmyadmin Créer une interface PHP/MySQL : 8

Connexion à un serveur MySQL Paramètres de connexion: Fonction: define(db_dsn, "mysqlhost.info.unicaen.fr;port=3333"); define(db_name, "chahir"); define(passwd, "toto"); define(user, "chahir"); $dsn = "mysql:host=". DB_DSN. ";dbname=". DB_NAME; $db = new PDO($dsn, USER, PASSWD); Etablir une connexion avec serveur (MySQL), pour un compte utilisateur, et de mot de passe secret. $db = new PDO($dsn, USER, PASSWD, array( PDO_ATTR_PERSISTENT => true )); établit une connexion permanente 9

<?php define(db_dsn, "mysqlhost.info.unicaen.fr;port=3333"); define(db_name, "chahir"); define(passwd, "toto"); define(user, "chahir"); $dsn = "mysql:host=". DB_DSN. ";dbname=". DB_NAME; try { $db = new PDO($dsn, USER, PASSWD); } catch (PDOException $e) { echo "Error!: ". $e >getmessage(). "<br/>"; die(); }?> Exemple 10

PLAN Architecture Interface phpmyadmin Créer une interface PHP/MySQL : Établir une connexion Exécuter une requête Exploiter les résultats de la requête Traiter les erreurs Fermer la connexion 11

Deux manières : Exécution Directe Exécuter une requête Utilisation de la méthode exec() Utilisation de la méthode query() Requête préparée (recommandé pour la vitesse & sécurité) Utilisation de la méthode prépare 12

Requêtes de changement Insertion INSERT Suppression : DELETE Mise à jour: UPDATE Exécution Directe Utilisation de la méthode exec() La valeur de retour indique le nombre de lignes affectés par l'opération ou FALSE en cas d'erreur Rq: Pas de changement ==> return 0 Exemple: $db = new PDO(... ); $res = $db->exec( UPDATE foo SET id= bar ); $res = $db->exec( INSERT INTO foo (id) VALUES( bar ) ); $res = $db->exec( DELETE foo WHERE id= bar ); if ($res!== FALSE) echo Erreur!! ; 13

Récupérer le dernier identifiant lastinsertid() <?php... généré automatiquement renvoie l'identifiant généré sur un champ de type auto_increment à la suite d'un ordre INSERT if ($db->exec( INSERT INTO )) { $id = $db->lastinsertid(); }?> 14

Exécution Directe Utilisation de la méthode query() Requêtes pour récupérer les informations SELECT Retourne FALSE en cas d'erreur Exemple: $res = $db->query( SELECT * FROM Regions ); // $res == PDOStatement Object 15

Parcourir les résultats (Fetch) Une des grandes caractéristiques de POO est sa flexibilité sur la récupération de données: Array (Numeric or Associated Indexes) Strings (for single column result sets) Objects (stdclass, object of given class or into an existing object) Iterators... 16

Types Fetch $stmt >fetch(pdo_fetch_both) Array with numeric and string keys (default option) PDO_FETCH_NUM Array with numeric keys PDO_FETCH_ASSOC Array with string keys PDO_FETCH_OBJ $obj >name holds the name column from the row PDO_FETCH_BOUND Just returns true until there are no more rows Remarque: PDO_FETCH_ASSOC: Return next row as an array indexed by column name Array( [NAME] => apple [COLOUR] => red ) PDO_FETCH_BOTH: Return next row as an array indexed by both column name and number Array ( [NAME] => banana [0] => banana [COLOUR] => yellow [1] => yellow ) PDO_FETCH_OBJ: Return next row as an anonymous object with column names as properties 17

Array Fetching On peut préciser le mode $resultats->setfetchmode(pdo::fetch_obj); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet Sinon, on le précise pour fetch() $res = $db->query( SELECT * FROM foo ); while ($row = $res->fetch(pdo::fetch_num)){ // $row == array with numeric keys } $res = $db->query( SELECT * FROM foo ); while ($row = $res->fetch(pdo::fetch_assoc)){ // $row == array with associated (string) keys } 18

Exemple 1 <?php... $db = new PDO($dsn, USER, PASSWD); $requete= "SELECT titre from Film where titre like '%minutes%'"; foreach ($db >query($requete) as $row) { echo $row['titre'] ; //print_r($row); }... $db = null;?> 19

Exemple 2 $requete="select titre FROM Film where titre like '%la%' "; $res=$db >query($requete);); while( $ligne = $res >fetch() ) // on récupère la liste des membres { echo $ligne >titre.'<br />'; // on affiche les membres } 20

fetchall() fetchall() permet de stocker tous les résultats d'une requête. $res1 = $db >query($requete); $tab = $res1 >fetchall(pdo::fetch_assoc); //var_dump($tab); for ($i=0; $i<count($tab); $i++) { echo $tab[$i]["titre"]." ".$tab[$i]["genre"]."<br/>"; } 21

Requête préparée Utilisation de la méthode prepare Prépare une requête SQL a être exécutée Marqueurs qui seront substitués lors de l'exécution Deux types de marqueurs:? et marqueurs nominatifs * Avantages: Optimisation des performances pour des requêtes appelées plusieurs fois Protection des injections SQL * Pas traitée ici 22

<?php?> // ouverture d'une connexion... Exemple Utilisation sans marqueurs $requete="select titre FROM Film where titre like '%la%' "; $resultats=$db >prepare($requete"); // on prépare notre requête $resultats >execute(); while($lignes=$resultats >fetch(pdo::fetch_obj)) { } echo $lignes >titre.'<br />'; $res = null; $db = null; 23

PLAN Architecture Interface phpmyadmin Créer une interface PHP/MySQL : Établir une connexion Exécuter une requête Exploiter les résultats de la requête Traiter les erreurs Fermer la connexion 24

Gestion des erreurs Deux méthodes: errorcode() Code de l'erreur en rapport avec le SQL echo $db >errorcode() ; Ex. 42000 == Syntax Error errorinfo() Erreur détaillée print_r($db >errorinfo()); Ex. array( ) [0] => 42000, [1] => 1064 [2] => You have an error in your SQL syntax; 25

Gestion des erreurs PDO offre 3 modes d'erreur: $db >setattribute(pdo_attr_errmode, $mode); (1)PDO_ERRMODE_SILENT / (2) PDO_ERRMODE_WARNING / (3)PDO_ERRMODE_EXCEPTION if (!$db >query($sql)) { (1) echo $db >errorcode(). "<br>"; $info = $db >errorinfo(); // $info[0] == $db >errorcode() unified error code // $info[1] is the driver specific error code; // $info[2] is the driver specific error string } (3) try { $db >exec($sql);} catch (PDOException $e) { // display warning message print $e >getmessage(); $info = $e >errorinfo(); // $info[0] == $e >code; unified error code // $info[1] is the driver specific error code // $info[2] is the driver specific error string } 26

Traitement des erreurs Ajout d un opérateur @ évite la sortie du script. Fonction die() provoque l interruption du script. 27

<?php function Connexion_BD($requete) { define(db_dsn, "mysqlhost.info.unicaen.fr;port=3333"); Exemple define(db_name, "chahir"); define(passwd, "toto"); define(user, "chahir"); $dsn = "mysql:host=". DB_DSN. ";dbname=". DB_NAME; try { // ouverture d'une connexion... $db = new PDO($dsn, USER, PASSWD); echo "Liaison établie<br/>"; $requete="select titre,genre from Film where titre like '%minute%'"; $html="<table><th>titre</th><th>genre</th>"; foreach ($db >query($requete) as $ligne) { } $html.="<tr>"; $html.="<td>".$ligne["titre"]."</td><td>".$ligne["genre"]."</td>"; $html.="</tr>"; $html.="</table>"; echo $html; } catch (PDOException $e) { echo "Error!: ". $e >getmessage(). "<br/>"; }?> 28