Interfaçage avec une base de données



Documents pareils
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

Mysql avec EasyPhp. 1 er mars 2006

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

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

PDO : PHP Data Object 1/13

Pratique et administration des systèmes

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

PHP. PHP et bases de données

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)

SYSTÈMES D INFORMATIONS

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

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

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

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

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

Bases de données Outils de gestion

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

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

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

Bases de données relationnelles

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

Attaques applicatives

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Connexion à une base de données. Connexion à une base de données. Connexion à une base de données Développement d'une application

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

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

PHP 5.4 Développez un site web dynamique et interactif

1 Introduction et installation

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

SQL MAP. Etude d un logiciel SQL Injection

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

Les bases de données

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

Raja Bases de données distribuées A Lire - Tutoriel

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

Le langage SQL Rappels

1. Base de données SQLite

Bases de Données et Internet

SQL Historique

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

Application web de gestion de comptes en banques

Les BASES de DONNEES dans WampServer

I. MySQL : Serveur et SGBD

Objectifs du TP : Initiation à Access

Introduction aux SGBDR

MODE OPERATOIRE OPENOFFICE BASE

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

Gestion des utilisateurs et de leurs droits

Java DataBaseConnectivity

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

RÉALISATION D UN SITE DE RENCONTRE

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

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

Architectures web/bases de données

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Gestion de stock pour un magasin

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

OpenPaaS Le réseau social d'entreprise

Olivier Mondet

TP Administration Oracle

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

Gestion des bases de données

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

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

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

Bases de données élémentaires Maude Manouvrier

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

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

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

et Groupe Eyrolles, 2006, ISBN :

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

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

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

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

Installation et Mise en œuvre de MySQL

Service d'authentification LDAP et SSO avec CAS

Sécurité des applications web. Daniel Boteanu

SQL Server et Active Directory

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

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

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

Bases de données cours 1

LES ACCES ODBC AVEC LE SYSTEME SAS

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

Information utiles. webpage : Google+ : digiusto/

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

Configuration d'un annuaire LDAP

Module BD et sites WEB

Transcription:

Interfaçage avec une base de données Principe PHP propose de nombreux outils permettant de travailler avec la plupart des SGBD Oracle, Sybase, Microsoft SQL Server, PostgreSQL ou encore MySQL Php fournit un grand choix de fonctions permettant de manipuler les bases de données. Quatre fonctions sont essentielles: La fonction de connexion au serveur La fonction de choix de la base de données La fonction de requête La fonction de déconnexion

Interfaçage avec une base de données Les fonctions principales de manipulation pour mysql sont : La fonction de connexion au serveur : mysql_connect() mysql_pconnect() La fonction de choix de la base de données : mysql_select_db() La fonction de requête : mysql_query() La fonction de déconnexion : mysql_close()

La connexion au serveur I Les variables qui vont permettre la connexion au serveur (Attention, le nom des variables est bien sûr libre) $host : l'hôte (ordinateur sur lequel le SGBD est installé) $user : le nom d'utilisateur de la BdD $passwd : le mot de passe de cet utilisateur Exemple : $host="localhost" $user="admin" $passwd="*****"

La connexion au serveur II $id_connexion = mysql_connect($host, $user, $passwd) retourne une valeur de type integer ($id_connexion)( ) servant d identificateur de connexion lorsque la connexion a été établie retourne false si une erreur se produit lors de l établissement de la connexion Si $id_connexion est différent de false, la connexion est établie. Il peut être utile de bien tester cette connexion. Cela permettra de gérer proprement l'éventuelle indisponibilité du serveur de BdD.

La fonction die() Termine le script courant die(chaine) die() termine l'exécution du script courant. Elle n'a pas de valeur de retour mais elle utilisera chaine comme message de fin d'exécution. (emprunt à PERL) Cette fonction est souvent utilisée pour les connexions aux bases de données, mais n'est pas du tout obligatoire.

<?php Le script de connexion au serveur $id_connexion = mysql_connect($host, $user, $passwd) or die("impossible de se connecter"); echo "Connexion réussie";?> $id_connexion contient une référence à cette connexion sur la base. Cet identifiant pourra être présenté pour chaque commande mysql qu'on effectuera ensuite. Cela peut être utile si votre programme se connecte à plusieurs bases de données différentes, ou à plusieurs serveurs différents. Cependant, on peut omettre sa gestion si on utilise une seule base, sur une seule machine.

Accès à une base de données Suite à la connexion à un SGBD, il faut soit sélectionner la base de données si elle existe, soit la créer si elle n existe pas. Sélection de la bases de données $bdd : mysql_select_db($bdd) mysql_select_db($bdd,$id) Création de la bases de données $bdd : mysql_create_db ($bdd) mysql_create_db ($bdd,$id)

Comment se connecter à une base <?php // Connexion au serveur $id_connexion = mysql_connect($host, $user, $passwd) or die("impossible de se connecter"); // sélection de la base mysql_select_db($bdd,$id_connexion)?> or die("connection à la base impossible"); Ce fichier peut être inclus dans un script exploitant la base $bdd à l'aide de include() Avec cette procédure, le mot de passe est écrit "en dur" dans le fichier. (mais en php, on ne voit pas le contenu à distance) L'emploi d'un formulaire (avec la méthode POST) dans lequel on demande le login et le mot de passe évite de l'avoir écrit dans un fichier.

Comment se déconnecter // Fermeture de la connexion mysql_close( $id_connexion ); Cette commande sert finalement assez peu. En effet, si vous avez ouvert une connexion avec mysql_connect(), celle-ci est fermée automatiquement en fin de script. Et si vous avez choisi une connexion persistante, il ne faut pas la fermer, sauf éventuellement en fin de session.

Les requêtes SQL Les requêtes doivent répondre à la syntaxe SQL en général Les requêtes SQL sont envoyées à la base de données par : mysql_query()

Comment exécuter une requête // Exécuter des requêtes SQL $query = "SELECT * FROM my_table"; $result = mysql_query($query) or die("requête non conforme"); $query2= "INSERT INTO etud VALUES( bob, l'éponge,2001/04/02"); $result = mysql_query($query2,$id) or die("requête non conforme");

Traitement des résultats d une requête $result contient l'ensemble des enregistrements retournés par la requête. On dit que c'est un RecordSet. On utilise la fonction mysql_fetch_row(), qui découpe les lignes de résultats en colonnes (par exemple Nom,adresse,...) et les affecte à une variable tableau dans l'ordre où elles arrivent (exemple I). On utilise la fonction mysql_fetch_assoc() qui découpe les lignes de résultats en colonnes (par exemple Nom,adresse,...) et les affecte à une variable tableau associatif (exemple II). Exemple: une table appelée liens contenant le nom et l'url de sites internet. récupérer l'ensemble des enregistrements et de les afficher dans un tableau

C'est si simple? Mysql_query() renvoit un RecordSet. C'est un jeu d'enregistrements On peut se déplacer à l'intérieur, pour récupérer chaque tuple un par un (on dit qu'on fait un fetch, ce qui pourrait se traduire par «au suivant») Le RecordSet offre des fonctions, telles que nombre de lignes, nombre de colonnes, listage des noms des colonnes...

Exemple I <html><head><title>liens</title></head> <body> <table> <tr> <th>nom du site</th> <th>url</th> </tr> <?php // Déclaration des paramètres de connexion $host = la_machine ; $user = votre_login ; $bdd = Nom_de_la_base_de_donnees ; $passwd = Mot_de_passe ; // Connexion au serveur mysql_connect($host, $user, $passwd) or die("erreur de connexion au serveur"); mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

Exemple I suite // Creation et envoi de la requete $query = "SELECT nom,url FROM liens ORDER BY nom"; $result = mysql_query($query); // Recuperation des resultats while($row = mysql_fetch_row($result)){ //ici, on fetch un tableau indicé $nom = $row[0]; $url = $row[1]; echo "<tr>\n <td><a href=\"$url\">$nom</a></td>\n <td>$url</td>\n </tr>\n"; } // Déconnexion de la base de données mysql_close();?> </tr> </table> </body></html>

Exemple II // Afficher des résultats en HTML echo "<table>\n"; while ($ligne = mysql_fetch_assoc($result)) { //fetch en tableau associatif } echo "\t<tr>\n"; foreach ($ligne as $clef=>$val_col) { } echo "\t\t<td>la $clef vaut $val_col</td>\n"; echo "\t</tr>\n"; echo "</table>\n";s

Interfaçage avec une base de données L'exploitation des données Le décompte total des enregistrements ou des champs d'une table, peut être obtenu par l'intermédiaire de certaines fonctions applicables sur le recordset. $nb_lignes = mysql_num_rows($id_resultat); $nb_champs = mysql_num_fields($id_resultat);

Interfaçage avec une base de données L'exploitation des données A partir des enregistrements, chacun des champs devient accessible par des fonctions appropriées. Certaines fonctions sont capables d'extraire directement un champ déterminé $valeur = mysql_result($id_resultat, $num_ligne, $num_col);

Fonctions mysql_ mysql_close mysql_connect mysql_errno mysql_error dernière mysql_fetch_array tableau mysql_fetch_assoc mysql_fetch_row tableau mysql_num_fields mysql_pconnect mysql_query mysql_select_db -- Ferme la connexion MySQL -- Ouvre une connexion à un serveur MySQL -- Retourne le numéro d'erreur de la dernière commande MySQL -- Retourne le texte associé avec l'erreur générée lors de la requête -- Retourne une ligne de résultat MySQL sous la forme d'un associatif, d'un tableau indexé, ou les deux -- Lit une ligne de résultat MySQL dans un tableau associatif -- Retourne une ligne de résultat MySQL sous la forme d'un -- Retourne le nombre de champs d'un résultat MySQL -- Ouvre une connexion persistante à un serveur MySQL -- Envoi une requête à un serveur MySQL -- Sélectionne une base de données MySQL http://www.nexen.net/docs/php/annotee/mysql.intro.php

Construction d'une fonction générique Comment écrire une fonction générique php/ mysql? Utilisation des commandes liées au recordset Quelques contraintes au niveau de la base de données On veut un tableau html visualisant les tuples d'une table, de façon générique, automatique, avec possibilité de modification et de suppression.

Construction générique Utilisation possible : Caractère jocker de la projection en SQL : * En Php, la fonction mysql_field_name($recordset,numco lonne) pourra retrouver le nom de l'attribut : Pratique pour créer les entêtes de colonnes. Pour avoir le nombre de colonnes, mysql_num_field($recordset)...

Construction entête du tableau Démarche : on fait un select *. On interroge le recordset pour connaître le nombre de colonnes du résultat, et on interroge 1 à 1 le nom de cette colonne. En PHP, on fabrique une table html, et on définit une ligne d'entête grace aux balises de tableau (<thead><tr> <th>)

Et on obtient... function Entete($recordset) { $nbchamps=mysql_num_fields($recordset) or die("ce n'est pas une demande valide!"); echo "<thead><tr>\n"; for ($i=0;$i<$nbchamps;$i++) { //$i parcourt les attributs echo "\t<th>"; echo mysql_field_name($recordset,$i); echo "</th>\n"; } echo "</tr></thead>\n"; }

Le corps maintenant Même raisonnement pour le corps du tableau, on va parcourir toutes les réponses contenues dans le recordset, et les ranger dans l'ordre des colonnes, afin de bien mettre en correspondance avec le titre de la colonne.

Le corps... function Corps($recordset,) { $nbchamps=mysql_num_fields($recordset); $nbenr=mysql_num_rows($recordset); echo "<tbody>\n"; for ($i=0;$i<$nbenr;$i++) {//Pour chaque ligne echo "\t<tr>\n";$ligne=mysql_fetch_array($recordset); for ($j=0;$j<$nbchamps;$j++) { //on affiche chaque champ echo "\t\t<td>$ligne[$j]</td>\n"; } echo "\t</tr>\n"; //fin de la ligne } echo "<tbody>\n"; }

Appel de l'ensemble function TableComplete($Question) { } $result=mysql_query($question); echo "<table>\n"; Entete($result); Corps($result,); echo "</table>\n"; //exemple d'appel <p>liste des étudiants</p> <?php TableComplete(«SELECT * FROM etudiants»);?>

Autres actions... Libération de la mémoire : Si dans un script vous faites beaucoup de requêtes dont les résultats sont imposants, vous pouvez gérer la mémoire : mysql_free_result(); Attention, en général, tout est libéré à la fin du script (même la connexion à la database est perdue)

Autres actions mysql_data_seek($recordset,$row) déplace le pointeur interne de résultat, dans le résultat associé à l'identifiant de résultat $recordset. Il le fait pointer à la ligne $row_number. Le prochain appel à une fonction MySQL de récupération de données, comme la fonction mysql_fetch_assoc() retournera cette ligne.

Autres actions mysql_insert_id() Retourne l'identifiant généré par la dernière requête INSERT MySQL. Cela peut être pratique quand vous voulez connaître la valeur de la clé primaire qui a été affectée à l'enregistrement.

Quelques exemples $insert = mysql_query("insert into archives values(\"{insertid}\",\"$lestag[civilite]\")"); if (!$insert) { $message = mysql_error()." Creation ARchives"; $noproblem = false; } //PEPIN $numarchive = mysql_insert_id(); mysql_query("insert into archivesedt select $numarchive,date,heuredebut,nbheures from presences, sequences,profs where presences.numsequence= sequences.numsequence and profs.numprof= sequences.numprof and presences.numstagiaire= $lestag[numstagiaire]");

... //et on attaque le nettoyage.. $net0 = mysql_query("delete from prescriptions where NumStagiaire=$lestag[NumStagiaire]"); if (!$net0) { $message = mysql_error()." PRESCRIPTIONS"; $noproblem = false; } //PEPIN