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



Documents pareils
PDO : PHP Data Object 1/13

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

PHP. PHP et bases de données

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

CREATION WEB DYNAMIQUE

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

PHP 4 PARTIE : BASE DE DONNEES

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)

Pratique et administration des systèmes

Stockage du fichier dans une table mysql:

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

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

Java DataBaseConnectivity

Mysql avec EasyPhp. 1 er mars 2006

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

1. Base de données SQLite

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

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

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

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

OpenPaaS Le réseau social d'entreprise

Olivier Mondet

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

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

I. MySQL : Serveur et SGBD

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

Installation et Mise en œuvre de MySQL

Les BASES de DONNEES dans WampServer

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

Attaques applicatives

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

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

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

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

Bases de données relationnelles

SQL Server et Active Directory

Application web de gestion de comptes en banques

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

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

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

IFT3030 Base de données. Chapitre 1 Introduction

Programmation Web. Madalina Croitoru IUT Montpellier

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

Devoir Data WareHouse

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

Accès aux bases de données

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)

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

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

WDpStats Procédure d installation

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

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

SQL Historique

Bases de données et fournisseurs de contenu

Bases de SQL. Hacks 1-6 CHAPITRE UN

SYSTÈMES D INFORMATIONS

Django et PostgreSQL sous la charge

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

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

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

PHP 5.4 Développez un site web dynamique et interactif

TP Contraintes - Triggers

Configuration de plusieurs serveurs en Load Balancing

1 Position du problème

Sécurité des applications web. Daniel Boteanu

CREATION d UN SITE WEB (INTRODUCTION)

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.

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

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

2 Serveurs OLAP et introduction au Data Mining

Présentation Windows Azure Hadoop Big Data - BI

Cours: Administration d'une Base de Données

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

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

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

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

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

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

SECURIDAY 2013 Cyber War

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

Bases de données et sites WEB

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

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

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Une famille d'applications permettant à toute organisation d'optimiser le suivi et la gestion de ses ressources internes vous présente

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

Test de HSQLDB et Comparatif avec Sqlite

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

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Open Source Job Scheduler. Installation(s)

Compétences Business Objects

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Gestion des utilisateurs et de leurs droits

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

Mercredi 15 Janvier 2014

Transcription:

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

PLAN Architecture 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 ( pass $ mysql_connect($host, $user, MySQLi ( pass $ new mysqli($host, $user, 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! ( spécialistes Fonctions particulières (pour 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

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. $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => true ); $db = new PDO($dsn, USER, PASSWD, $options); Connexion persistante : elle n'est pas fermée à la fin du script, mais mise en cache et réutilisée lorsqu'un autre script demande une connexion en utilisant les mêmes paramètres 7

<?php Exemple try { $dns = 'mysql:host=mysql.info.unicaen.fr;port=3333;dbname=chahir'; $utilisateur = 'chahir'; $motdepasse = 'toto'; // Options de connection $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_PERSISTENT => true ); $connection = new PDO( $dns, $utilisateur, $motdepasse, $options ); } catch ( Exception $e ) { echo "Connection à MySQL impossible : ", $e->getmessage(); die(); }?> 8

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 9

Exécuter une requête Deux manières : Exécution Directe Utilisation de la méthode query() Utilisation de la méthode exec() Requête préparée * Utilisation de la méthode prépare 10

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 ); On doit indiquer comment on compte utiliser les résultats? 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 En tant qu'objet : $res->setfetchmode(pdo::fetch_obj); 11

Mode de récupération? On peut préciser le mode : avec setfetchmode(...) Exemple : $resultats->setfetchmode(pdo::fetch_obj); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet () fetch Sinon, on le précise pour $res = $db->query( SELECT * FROM films ); while ($ligne = $res->fetch(pdo::fetch_num)){ // tableau numérique echo $ligne[0] ; } $res = $db->query( SELECT * FROM films ); while ($ligne = $res->fetch(pdo::fetch_assoc)){ // tableau associatif echo $ligne['titre'] ; //print_r($row); } 12

Exemple... $requete="select titre FROM Film where titre like '%la%' "; $res=$db->query($requete);); while( $ligne = $res->fetch(pdo::fetch_obj) ) / { echo $ligne->titre.'<br />'; // on affiche les membres } ou while( $ligne = $res->fetch(pdo::fetch_assoc) ) { echo $ligne['titre'].'<br />'; // on affiche les membres }... 13

() fetchall fetchall() permet de récupérer 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/>"; } 14

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!! ; 15

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

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 17

<?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; 18

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 19

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; 20

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 } $db->exec($sql);} try { ( 3 ) 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 } 21

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

<?php try { $dns = 'mysql:host=mysql.info.unicaen.fr;;dbname=chahir_bd'; $utilisateur = 'chahir'; $motdepasse = 'toto'; // Options de connection $options = array(pdo::mysql_attr_init_command => "SET NAMES utf8",pdo::attr_errmode => PDO::ERRMODE_EXCEPTION); $connection = new PDO( $dns, $utilisateur, $motdepasse, $options ); echo "Connection etablie <br/>"; $today = date("j, n, Y"); echo "Nous sommes $today <br>"; $jour=date("j"); $mois=date("n"); // On envoie la requète $select = $connection->query("select * FROM fetes where jour=$jour and mois=$mois"); // On indique que nous utiliserons les résultats en tant qu'objet $select->setfetchmode(pdo::fetch_obj); // Nous traitons les résultats en boucle while( $ligne = $select->fetch() ){ // Affichage des enregistrements echo '<h1>', $ligne->jour, ' ', $ligne->fete, '</h1>'; } } catch ( Exception $e ) { echo "Connection à MySQL impossible : ", $e->getmessage(); die(); Exemple }?> 23