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



Documents pareils
CREATION WEB DYNAMIQUE

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

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

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

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

Attaques applicatives

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

Java DataBaseConnectivity

LES ACCES ODBC AVEC LE SYSTEME SAS

PHP 4 PARTIE : BASE DE DONNEES

Stockage du fichier dans une table mysql:

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

Olivier Mondet

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

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)

SQL Parser XML Xquery : Approche de détection des injections SQL

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

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Synchronisation Mysql (Replication)

PHP. PHP et bases de données

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

Architecture de la plateforme SBC

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

SQL Historique

Pratique et administration des systèmes

MODE OPERATOIRE OPENOFFICE BASE

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

Gestion des utilisateurs et de leurs droits

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

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

PDO : PHP Data Object 1/13

Mysql avec EasyPhp. 1 er mars 2006

Bases de données relationnelles

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

OpenPaaS Le réseau social d'entreprise

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

FileMaker 13. Guide ODBC et JDBC

ORACLE TUNING PACK 11G

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

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

Le Langage SQL version Oracle

Optimisations des SGBDR. Étude de cas : MySQL

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

Cours: Administration d'une Base de Données

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

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

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. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Le Langage De Description De Données(LDD)

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

Encryptions, compression et partitionnement des données

Méthode de Test. Pour WIKIROUTE. Rapport concernant les méthodes de tests à mettre en place pour assurer la fiabilité de notre projet annuel.

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

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

Bases de données et sites WEB

Installation FollowMe Q server

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

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

FileMaker Server 13. Publication Web personnalisée avec XML

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Architectures haute disponibilité avec MySQL. Olivier Olivier DASINI DASINI - -

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

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

Gestion de base de données

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

Accès aux bases de données

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

MS SQL Express 2005 Sauvegarde des données

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

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

Les BASES de DONNEES dans WampServer

Bases de données et sites WEB Licence d informatique LI345

Test de HSQLDB et Comparatif avec Sqlite

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

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

MySQL. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Information utiles. webpage : Google+ : digiusto/

Les Utilisateurs dans SharePoint

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

SQL MAP. Etude d un logiciel SQL Injection

Bases de SQL. Hacks 1-6 CHAPITRE UN

Création de Sous-Formulaires

NAS 224 Accès distant - Configuration manuelle

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

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

Optimisation de MySQL

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

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

Application web de gestion de comptes en banques

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

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

Formation en Logiciels Libres. Fiche d inscription

Introduction aux SGBDR

Pour les débutants. langage de définition des données

MODE OPERATOIRE CORIM PROGRESS / SECTION MEI. Exploitation Informatique

Transcription:

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

Introduction Les prepared statements côté serveur sont une des nouvelles fonctionnalités les plus intéressantes de MySQL 4.1 (récemment sorti en production release 4.1.7). Les prepared statements sont un dispositif permettant de mettre en place (" préparer ") une requête une fois pour toutes, puis de l'exécuter plusieurs fois avec des paramètres différents. Ils ont pour but de remplacer les requêtes classiques, en étant plus sûrs et plus efficaces. Un prepared statement typique ressemble à ceci : SELECT * FROM Pays WHERE code =? Le point d'interrogation est ce qu'on appelle un paramètre fictif (placeholder). Lorsque la requête ci-dessus est exécutée, vous devez spécifier la valeur qui vient remplacer le? dans cette requête.

Pourquoi faire? Il y a de nombreux avantages à utiliser des prepared statements dans vos applications, à la fois en termes de sécurité et de performance. Les prepared statements peuvent contribuer à améliorer la sécurité en séparant la logique SQL des données fournies. Cette séparation peut aider à prévenir un type très courant de vulnérabilité appelée attaque par injection de code SQL. Avec une requête classique, vous devez utiliser des fonctions qui échappent tous les caractères pouvant poser problème, comme les guillemets simples, doubles et les anti-slashes. C'est inutile dans le cas des prepared statements. La séparation des données permet à MySQL de prendre automatiquement en compte ces caractères et ils n'ont pas besoin d'être échappés par une fonction quelconque.

Pourquoi faire? Le gain de performance dû aux prepared statements peut avoir plusieurs origines différentes. Tout d'abord, il n'est nécessaire de parser la requête qu'une seule fois. Au début, lorsque vous préparez la requête, MySQL analyse l'instruction pour vérifier la syntaxe et met en place la requête à exécuter. Par la suite, si vous exécutez la requête plusieurs fois, il n'y aura plus ce préalable. Ce préparsing peut engendrer un gain de rapidité si vous devez effectuer la même requête de nombreuses fois, par exemple lorsque vous faites beaucoup d'insert. Le deuxième facteur qui peut faire augmenter les performances est un nouveau protocole binaire utilisé par les prepared statements. Le protocole traditionnel de MySQL convertit toujours les données en des chaînes de caractères qui sont souvent plus longues que les données originales, les envoie à travers le réseau (ou autres) vers le serveur, qui décode finalement la chaîne dans le type de données correct. Le protocole binaire supprime ce passage obligé par la conversion. Tous les types sont envoyés dans leur forme binaire native, ce qui économise le temps CPU de conversion, et peut aussi diminuer l'utilisation réseau.

Quand les utiliser? Les prepared statements peuvent être utiles pour toutes les raisons évoquées cidessus, toutefois ils ne devraient (et ne peuvent) pas être utilisés pour tout et n'importe quoi dans votre application. Tout d'abord, le type de requête sur lequel ils marchent se limite au DML (Data Manipulation Language) : INSERT, REPLACE, UPDATE, et DELETE, ainsi qu'aux requêtes CREATE TABLE et SELECT. La gestion d'autres types de requêtes sera ajoutée dans les versions futures afin de rendre l'api pour les prepared statements plus générique. Parfois, les prepared statements peuvent en fait être plus lents que des requêtes normales. En effet, il y a deux aller-retours jusqu'au serveur (un pour la préparation, l'autre pour l'exécution), ce qui peut ralentir des requêtes simples exécutées seulement une fois. Dans des cas comme celui-ci, à vous de décider si les bénéfices des prepared statements en termes de sécurité valent l'impact sur les performances de cet allerretour supplémentaire.

Comment les utiliser? PHP 5 possède une nouvelle interface pour MySQL appelée "mysqli". Pour plus de précisions sur celle-ci, veuillez consulter la section mysqli du manuel PHP. L'API fournie par l'extension mysqli ressemble presque trait pour trait à l'api C, il pourrait donc aussi être utile de consulter la documentation de cette dernière. Un exemple de prepared statement avec PHP // Connexion $conn = mysqli_connect("localhost", "user", "password", "base"); $code = "FIN"; // Préparation du statement if ($stmt = mysqli_prepare($conn, " SELECT nom FROM Pays WHERE code =?")) { // Attachement des paramètres et exécution mysqli_stmt_bind_param($stmt, "s", $code); mysqli_stmt_execute($stmt); // Récupération et affichage du résultat mysqli_stmt_bind_result($stmt, $nom); mysqli_stmt_fetch($stmt); echo "Nom du Pays : ". $nom; mysqli_stmt_close($stmt);} mysqli_close($conn);

Comment les utiliser? il existe aussi une interface SQL pour les prepared statements. En d'autres termes, vous pouvez faire des prepared statements sans support spécifique de l'api de votre langage de programmation. Trois nouvelles instructions SQL le permettent : PREPARE, EXECUTE, et DEALLOCATE PREPARE. Elles ne tirent pas parti du nouveau protocole binaire, et devraient donc être utilisées seulement pour des tests ou lorsqu'aucune API native n'est disponible. Un exemple de prepared statement en SQL mysql> PREPARE nom_stmt FROM "SELECT nom FROM Pays WHERE code =?"; Query OK, 0 rows affected (0.09 sec) Statement prepared mysql> SET @param = "FIN"; Query OK, 0 rows affected (0.00 sec) mysql> EXECUTE nom_stmt USING @param; +----------+ nom +----------+ Finlande +----------+ 1 row in set (0.03 sec) mysql> DEALLOCATE PREPARE nom_stmt;query OK, 0 rows affected (0.00 sec)