PDO : PHP Data Object 1/13



Documents pareils
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 5. La base de données MySql. A. Belaïd 1

PHP. PHP et bases de données

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)

CREATION WEB DYNAMIQUE

Java DataBaseConnectivity

Mysql avec EasyPhp. 1 er mars 2006

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

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

SYSTÈMES D INFORMATIONS

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

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

Attaques applicatives

OpenPaaS Le réseau social d'entreprise

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

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

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

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

PHP 5.4 Développez un site web dynamique et interactif

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

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

FileMaker 13. Guide ODBC et JDBC

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

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

Présentation du module Base de données spatio-temporelles

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

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

LES ACCES ODBC AVEC LE SYSTEME SAS

Test de HSQLDB et Comparatif avec Sqlite

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

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

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

Stockage du fichier dans une table mysql:

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

Module BD et sites WEB

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

Bases de Données et Internet

Architectures web/bases de données

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

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

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

Accès aux bases de données

Compte-rendu de projet de Système de gestion de base de données

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

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

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

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Pratique et administration des systèmes

Introduction. Passage de sites statiques à des sites dynamiques

Gestion de stock pour un magasin

Connexion entre une BD FileMaker Pro 10 et ArcGis 10.x sous Windows 7

Dans l'article précédent, vous avez appris

Installation FollowMe Q server

DOM - Document Object Model

TP Programmation Java / JDBC / Oracle

Bases de SQL. Hacks 1-6 CHAPITRE UN

2 Serveurs OLAP et introduction au Data Mining

Compte Rendu d intégration d application

IFT3030 Base de données. Chapitre 1 Introduction

Formulaires et Compteurs

ORACLE TUNING PACK 11G

TP JAVASCRIPT OMI4 TP5 SRC

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

Sommaire Accès via un formulaire d'identification... 4 Accès en mode SSO... 5 Quels Identifiant / mot de passe utiliser?... 6

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

III. Contexte. Objectifs. Philippe HOUE, Ecole des Mines de Nantes

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

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

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

Gestion des utilisateurs et de leurs droits

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

Manuel d utilisateur 1

API SMS CONSEIL HTTP V2.01. Sommaire. Documentation V1.0 au 21/05/2011

Date: 22/10/12 Version: 3.2

NatRcs Ce document présente la liste des nouvelles fonctionnalités de la 7.00, disponible à partir de Mars 2011.

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

Session S12 Les bases de l optimisation SQL avec DB2 for i

Corrigé de l'atelier pratique du module 6 : Transfert de données

Corrigé de l'atelier pratique du module 3 : Récupération d'urgence

1. Base de données SQLite

Construisez plus rapidement vos apps mobiles avec MicroStrategy 10. Ludivine Fèvre, Consultante Avant-vente 16 Juin 2015

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

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

1/ Présentation de SQL Server :

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

Les bases de données

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

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

CREATION d UN SITE WEB (INTRODUCTION)

Mercredi 15 Janvier 2014

Transcription:

PDO : PHP Data Object 1/13

Tous ne sont que des extensions... Les fonstions mysql_* : API mysql Les fonctions mysqli_* aussi Il en est de même pour PDO PDO (avec le pilote PDO MySQL Driver et Extension MySQL Extension mysqli MySQL Native Driver) Version d'introduction en PHP Avant 3.0 5.0 5.0 Inclus en PHP 5.x Oui, mais désactivé Oui Oui Statut de développement MySQL Maintenance uniquement Développement actif Recommandée pour les nouveaux projets MySQL Non Oui Oui L'API supporte les jeux de caractères Non Oui Oui L'API supporte les commandes préparées Non Oui Oui L'API supporte les commandes préparées côté client Non Non Oui L'API supporte les procédures stockées Non Oui Oui L'API supporte les commandes multiples Non Oui La plupart L'API supporte toutes les fonctionnalités MySQL 4.1 et plus récent Non Oui La plupart Développement actif depuis PHP 5.3 2/13

Qu'est ce que PDO PDO signifie Php Data Object C' est une couche d'abstraction des fonctions d'accès aux bases de données Les requêtes ne seront pas automatiquement compatibles avec n'importe quelle base de données Seules les fonctions d'accès sont universelles : pour mysql: mysql_connect() mysql_query() mysql_result() mysql_fetch_array() mysql_real_escape_string() etc. 3/13

Pourquoi PDO plutôt qu'un autre? D'autres alternatives existent : MDB2 de PEAR PDO : extension compilée de PHP donc performances supérieures Standard : http://www.phpteam.net/index.php/articles/les-nouveautesde-php-6 Depuis la version 5 de php, MySQL est désactivé 4/13

PDO : Encore en développement Certains pilotes de PDO sont encore en développement D'autres n'existent pas encore Liste des pilotes disponibles : Nom du driver Bases de données supportées PDO_CUBRID Cubrid PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase PDO_FIREBIRD Firebird/Interbase 6 PDO_IBM IBM DB2 PDO_INFORMIX IBM Informix Dynamic Server PDO_MYSQL MySQL 3.x/4.x/5.x PDO_OCI Oracle Call Interface PDO_ODBC ODBC v3 (IBM DB2, unixodbc et win32 ODBC) PDO_PGSQL PostgreSQL PDO_SQLITE SQLite 3 et SQLite 2 PDO_4D 4D 5/13

La classe PDO commit : Valide une transaction construct : Crée une instance PDO qui représente une connexion à la base errorcode : Retourne le SQLSTATE associé avec la dernière opération sur la base de données errorinfo : Retourne les informations associées à l'erreur lors de la dernière opération sur la base de données exec : Exécute une requête SQL et retourne le nombre de lignes affectées getattribute : Récupère un attribut d'une connexion à une base de données PDO::getAvailableDrivers : Retourne la liste des pilotes PDO disponibles intransaction : Vérifie si nous sommes dans une transaction lastinsertid : Retourne l'identifiant de la dernière ligne insérée ou la valeur d'une séquence prepare : Prépare une requête à l'exécution et retourne un objet query : Exécute une requête SQL, retourne un jeu de résultats en tant qu'objet PDOStatement quote : Protège une chaîne pour l'utiliser dans une requête SQL PDO rollback : Annule une transaction (même si le script php plante) setattribute : Configure un attribut PDO begintransaction : Démarre une transaction 6/13

Exemple d'instanciation fichier my_setting.ini: [database] driver = mysql host = localhost ;port = 3306 schema = db_schema username = user password = secret Classe PHP: <?php class MyPDO extends PDO { public function construct($file = 'my_setting.ini') { if (!$settings = parse_ini_file($file, TRUE)) throw new exception('impossible d'ouvrir '. $file. '.'); ''). $dns = $settings['database']['driver']. ':host='. $settings['database']['host']. ((!empty($settings['database']['port']))? (';port='. $settings['database']['port']) : ';dbname='. $settings['database']['schema']; } parent:: construct($dns, $settings['database']['username'], $settings['database']['password']); }?> 7/13

La classe PDOStatement bindcolumn : Lie une colonne à une variable PHP bindparam : Lie un paramètre à un nom de variable spécifique bindvalue : Associe une valeur à un paramètre closecursor : Ferme le curseur, permettant à la requête d'être de nouveau exécutée columncount : Retourne le nombre de colonnes dans le jeu de résultats debugdumpparams : Détaille une commande préparée SQL errorcode : Récupère le SQLSTATE associé lors de la dernière opération sur la requête errorinfo : Récupère les informations sur l'erreur associée lors de la dernière opération sur la requête execute : Exécute une requête préparée fetch : Récupère la ligne suivante d'un jeu de résultat PDO fetchall : Retourne un tableau contenant toutes les lignes du jeu d'enregistrements fetchcolumn : Retourne une colonne depuis la ligne suivante d'un jeu de résultats fetchobject : Récupère la prochaine ligne et la retourne en tant qu'objet getattribute : Récupère un attribut de requête getcolumnmeta : Retourne les métadonnées pour une colonne d'un jeu de résultats nextrowset : Avance à la prochaine ligne de résultats d'un gestionnaire de lignes de résultats multiples rowcount : Retourne le nombre de lignes affectées par le dernier appel à la fonction PDOStatement::execute() setattribute : Définie un attribut de requête setfetchmode : Définit le mode de récupération par défaut pour cette requête 8/13

Fetch styles PDO::FETCH_BOTH par défaut PDO::FETCH_ASSOC: retourne un tableau indexé par le nom de la colonne comme retourné dans le jeu de résultats PDO::FETCH_BOTH (défaut): retourne un tableau indexé par les noms de colonnes et aussi par les numéros de colonnes, commençant à l'index 0, comme retournés dans le jeu de résultats PDO::FETCH_BOUND: retourne TRUE et assigne les valeurs des colonnes de votre jeu de résultats dans les variables PHP à laquelle elles sont liées avec la méthode PDOStatement::bindParam() PDO::FETCH_CLASS: retourne une nouvelle instance de la classe demandée, liant les colonnes du jeu de résultats aux noms des propriétés de la classe. Si fetch_style inclut PDO::FETCH_CLASS (c'est-à-dire PDO::FETCH_CLASS PDO::FETCH_CLASSTYPE), alors le nom de la classe est déterminé à partir d'une valeur de la première colonne PDO::FETCH_INTO: met à jour une instance existante de la classe demandée, liant les colonnes du jeu de résultats aux noms des propriétés de la classe PDO::FETCH_LAZY: combine PDO::FETCH_BOTH et PDO::FETCH_OBJ, créant ainsi les noms des variables de l'objet, comme elles sont accédées PDO::FETCH_NUM: retourne un tableau indexé par le numéro de la colonne comme elle est retourné dans votre jeu de résultat, commençant à 0 PDO::FETCH_OBJ: retourne un objet anonyme avec les noms de propriétés qui correspondent aux noms des colonnes retournés dans le jeu de résultats 9/13

La classe PDOException PDOException::getMessage Récupère le message de l'exception PDOException::getPrevious : Retourne l'exception précédente PDOException::getCode : Récupère le code de l'exception PDOException::getFile : Récupère le fichier dans lequel l'exception est survenue PDOException::getLine : Récupère la ligne dans laquelle l'exception est survenue PDOException::getTrace : Récupère la trace de la pile PDOException::getTraceAsString : Récupère la trace de la pile en tant que chaîne PDOException:: tostring : Représente l'exception sous la forme d'une chaîne PDOException:: clone : Clone l'exception 10/13

Transactions avec PDO <?php try { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(pdo::attr_persistent => true)); echo "Connecté\n"; } catch (Exception $e) { die("impossible de se connecter: ". $e->getmessage()); } try { $dbh->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); $dbh->begintransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit(); } catch (Exception $e) { $dbh->rollback(); echo "Failed: ". $e->getmessage(); }?> 11/13

Requêtes préparées Pourquoi les requêtes préparées? Inconvénients: plus de lignes de code que pour une requête simple exécution unique : performances moindres par rapport à une exécution directe résultat final identique : exécuter une requête débogage de la requête légèrement plus complexe Avantages: impose une certaine rigueur de programmation optimisation du temps d'exécutions requis pour les requêtes exécutées plus d'une fois plus grande sécurité au niveau des requêtes séparation requête SQL des données 12/13

Requêtes préparées : exemple <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> <fieldset> <legend>recherche de client</legend> <label>ville </label><input type="text" name="ville" /><br /><br /> <label>id_client</label><input type="text" name="id_client" /><br /> <input type="submit" value="envoyer" /> </fieldset> </form> <?php if (isset($_post[ ville ]) && isset($_post[ id_client ])) { $ville = strtolower($_post[ ville ]); $id_client = $_POST[ id_client ]; include( connexpdo.inc.php ); $idcom = connexpdo('magasin', 'myparam'); //$reqprep = $idcom >prepare("select prenom,nom FROM client WHERE lower(ville)=:ville AND id_client>=:id_client"); $reqprep = $idcom >prepare("select prenom,nom FROM client WHERE lower(ville)=:ville AND id_client>=:id_client"); //*****Liaison des paramètres $reqprep >bindparam(':ville',$ville,pdo::param_str); $reqprep >bindparam(':id_client',$id_client,pdo::param_int); $reqprep >bindparam(3,$id_client,pdo::param_int); $reqprep >execute(); //*****Liaison des résultats à des variables $reqprep >bindcolumn('prenom', $prenom); $reqprep >bindcolumn('nom', $nom); //*****Affichage echo "<div><h3>il y a ", $reqprep >rowcount(), " client(s) habitant à ", ucfirst($ville), " et dont l'identifiant est supérieur à $id_client</h3><hr />"; while ($result = $reqprep >fetch(pdo::fetch_bound)) { echo "<h3> $prenom $nom</h3>"; } echo "</div>"; $reqprep >closecursor(); $idcom = null; }?> 13/13