Cours Mysql avec EasyPhp pdf


Télécharger Cours Mysql avec EasyPhp pdf

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Mysql avec EasyPhp

1er mars 2006

Introduction

MYSQL dérive directement de SQL (Structured Query Language) qui est un langage de requètes vers les bases de données relationnelles.

Il en reprend la syntaxe mais n’en a pas toute la puissance.

Le serveur de base de données MySQL est très souvent utilisé avec le langage de création de pages web dynamiques : PHP.

base de données ? MYSQL ? script PHP

? HTTP ?

Page HTML

                                                 serveur                                                                                      client

Les données manipulées par le site seront stockées dans une base de données MySQL. Le script PHP , se servira de commandes MySQL pour gérer et extraire des informations de la base de données afin d’ engendrer les pages HTML qui seront interprétées par le navigateur.

Nous allons dans ce Tp, utiliser EasyPHP qui est une application permettant d’installer et de configurer automatiquement un environnement de travail complet sous Windows en regroupant un serveur Apache, un serveur MySQL, une interface graphique de gestion des bases de données MySQL : PHPMyAdmin et le langage suppose donc que EaysyPHP est installé sur votre machine.

Ces notes sont un résumé succint des articles :utilser MySQL et PHP de Frederic Bouchery : http et du tutoriel d’introduction de la doc mysql sur http .

Les liens vers les documentations MySQL et PHP se trouvent sur le site du cours.

1     MySQL

Pour pouvoir utiliser un serveur MySQL, il faut qu’il soit lancé. Cela se fait dans notre cas en lanc¸ant EasyPHP qui n’a d’autre effet que de démarrer les serveurs Apache et MySQL. Vous pouvez ensuite dialoguer avec le serveur Mysql, soit en mode commande (dans une fenetre invite de commande), soit via l’interface PhpMyadmin. Nous décrivons ici le mode commande.

1.1   Connexion

shell> mysql -h hote -u utilisateur -p

Enter password: ********

******** représente votre mot de passe, entrez-le lorsque mysql affiche Enter password : . Si vous travailler en local avec les paramètres par défaut, il n’y a pas de mot de passe. Si tout fonctionne, vous devrez voir quelques informations d’introduction suivies d’une invite de commande mysql>

shell> mysql -h localhost -u root

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 459 to server version: 3.22.20a-log Type ’help’ for help.

mysql>

L’invite vous dit que mysql attend que vous entriez des commandes.

Après vous être connecté avec succès, vous pouvez vous déconnecter à tout moment en entrant QUIT après l’invite mysql>

1.2   Créer et sélectionner une base

mysql> CREATE DATABASE menagerie;

La création d’une base de données ne la sélectionne pas pour l’utilisation; vous devez le faire explicitement. Pour rendre menagerie la base courante, utilisez cette commande :

mysql> USE menagerie;

Votre base a besoin d’être créée juste une fois, mais vous devez la sélectionner pour l’utiliser, chaque fois que vous débutez une session mysql .

1.3   Créer une table

Si une table a été sélectionnée, vous pouvez créer des tables. Par exemple, dans la base ménagerie :

mysql> CREATE TABLE animal (nom VARCHAR(20), maitre VARCHAR(20),

-> espece VARCHAR(20), sexe CHAR(1), naissance DATE, mort DATE);

VARCHAR est un bon choix pour les colonnes nom , maitre , et espece car leurs valeurs varient en longueur. La longueur de ces colonnes ne doit pas nécessairementêtre la même, et n’a pas besoin d’être forcement 20 . Vous pouvez choisir une taille entre 1 et 255 , celle qui vous semblera la plus raisonnable (si vous faites un mauvais choix et que vous vous apercevez plus tard que vous avez besoin d’un champ plus long, MySQL fournit la commande ALTER TABLE) .Le sexe des animaux peut être représenté de plusieurs fac¸ons, par exemple, ”m” et ”f” , ou bien ”male” et ”femelle” . Il est plus simple d’utiliser les caractères simples ”m” et ”f” .

1.4   Charger des données dans une table

Pour ajouter des données à une table, on peut utiliser les commandes LOAD DATA et INSERT. Nous ne décrivons ici que la commande INSERT.

Dans sa forme la plus simple, vous spécifiez une valeur pour chaque colonne, dans l’ordre ou` les colonnes sont listées dans la requête CREATE TABLE . Supposons que Diane achète un nouvel hamster nommé Puffball. Vous pourriez ajouter ce nouvel enregistrement en utilisant un INSERT de la fac¸on suivante :

mysql> INSERT INTO animal VALUES (’Puffball’,’Diane’,’hamster’,’f’,’1999-03-30’,NULL);

Notez que les chaˆ?nes de caractères et les valeurs de dates sont spécifiées en tant que chaˆ?nes protégées par des guillemets. De plus, avec INSERT vous pouvez insérer la valeur NULL directement pour représenter une valeur manquante.



1.5   Récupérer des informations à partir d’une table

La commande SELECT est utilisée pour récupérer des informations à partir d’une table. La forme usuelle est :

SELECT quoiSelectionner

FROM quelTable

WHERE conditionsASatisfaire

quoiSelectionner indique ce que vous voulez voir. Cela peut être une liste de colonnes, ou * pour indiquer “toutes les colonnes”. quelTable indique la table à partir de laquelle récupérer les données. La clause WHERE est optionnelle. Si elle est présente, conditionsASatisfaire spécifie les conditions que les lignes doivent satisfaire pour être séléctionnées.

Imaginons que nous ayons dans la table animal les données suivantes :

+----------+--------+---------+------+------------+------------+

| nom   | maitre | espece | sexe | naissance | mort    |

+----------+--------+---------+------+------------+------------+

| Fluffy | Harold | chat  | f

| 1993-02-04 | NULL    |

| Claws   | Gwen | chat   | m

| 1994-03-17 | NULL    |

| Buffy  | Harold | chien | f

| 1989-05-13 | NULL    |

| Fang    | Benny | chien | m

| 1990-08-27 | NULL    |

| Bowser | Diane | chien | m

| 1998-08-31 | 1995-07-29 |

| Chirpy | Gwen | oiseau | f

| 1998-09-11 | NULL    |

| Whistler | Gwen | oiseau | NULL | 1997-12-09 | NULL | | Slim    | Benny | serpent | m     | 1996-04-29 | NULL     |

| Puffball | Diane | hamster | f | 1999-03-30 | NULL    |

+----------+--------+---------+------+------------+------------+

mysql> SELECT * FROM animal; affichera la figure précédente.

mysql> SELECT * FROM animal WHERE espece = "chien" AND sexe = "f"; affichera les lignes de animal concernant les chiennes.

mysql> SELECT nom, naissance FROM animal; affichera le nom et la date de naissance de tous les animeaux de la table animal.

mysql> SELECT DISTINCT naissance FROM animal; affichera toutes les dates de naissance différentes de la table. (enlève les répétitions du résultat).

mysql> SELECT nom, naissance FROM animal ORDER BY naissance; trie le résultat sur le champ naissance.

mysql> SELECT maitre, COUNT(*) FROM animal GROUP BY maitre;

COUNT() compte le nombre de résultats non NULL. On extrait donc pour chaque maˆ?tre, son nom et le nombre d’animeaux qu’il possède.

1.6   Utiliser plusieurs tables

mysql> CREATE TABLE evenement (nom VARCHAR(20), date DATE, -> type VARCHAR(15), remarque VARCHAR(255));

Imagineons que cette table contienne les enregistrements suivants :

nom date type remarque

Fluffy 1995-05-15 mise bas

4 chatons, 3 femelles, 1 m^ales

Buffy   1993-06-23 mise bas

5 chiots, 2 femelles, 3 m^ales

Buffy   1994-06-19 mise bas

3 chiots, 3 femelles

Chirpy 1999-03-21 vétérinaire

Redresser le bec

Slim  1997-08-03 vétérinaire

Cotes casseés

Bowser 1991-10-12 chenil Fang 1991-10-12 chenil

Fang  1998-08-28 anniversaire Don d’un nouvel objet de mastication

Claws 1998-03-17 anniversaire Don d’un nouveau collier anti-puces Whistler 1998-12-09 anniversaire Premier anniversaire

Pour trouver l’aˆge de chaque animal lorsqu’il a mis bas, on a besoin de la table animal pour connaitre la date de naissance de l’animal et de la table evenement pour connaitre la date de l’accouchement. Il faut faire une jointure sur les champs noms des 2 tables. On utilisera la fonction To Days qui retourne le nombre de jours depuis l’an 0 correspondant a` la date. Voici la requète :

mysql> SELECT ,

-> (TO_DAYS(date) - TO_DAYS(naissance))/365 AS age,

-> remarque

-> FROM animal, evenement

-> WHERE = AND type = "mise bas";

+--------+------+--------------------------------+

| nom  | age | remarque                   |

+--------+------+--------------------------------+

| Fluffy | 2.27 | 4 chatons, 3 femelles, 1 m^ale |

| Buffy | 4.12 | 5 chiots, 2 femelles, 3 m^ales | | Buffy | 5.10 | 3 chiots, 3 femelles |

+--------+------+--------------------------------+

Pour trouver les paires mâles / femelles par rapport à l’espèce , on fait une jointure de animal avec animal. On a besoin de donner des alias pour différencier les 2 tables :



mysql> SELECT , , , , p1.espece

-> FROM animal AS p1, animal AS p2

-> WHERE p1.espece = p2.espece AND = "f" AND = "m";

+--------+------+--------+------+---------+

| nom  | sexe | nom  | sexe | espece |

+--------+------+--------+------+---------+

| Fluffy | f  | Claws | m   | chat   |

| Buffy | f   | Fang | m    | chien |

| Buffy | f  | Bowser | m   | chien |

+--------+------+--------+------+---------+

2     PHPMyAdmin

EasyPHP offre un utilitaire : PHPMyAdmin qui donne une interface graphique pour Mysql. Nous l’utiliserons dans le TP.

3      MYSQL et PHP

L’utilisation de MySQL avec PHP s’effectue en 4 temps :

1.    Connexion au serveur de données

2.    Sélection de la base de données

3.    Requête

4.    Exploitation des requêtes

On peut ajouter à c¸a, un 5ème temps facultatif dans le cas d’une connexion simple : fermeture de la connexion.

3.1      Connexion au serveur de données

Pour se connecter au serveur de données, il existe 2 méthodes : Ouverture d’une connexion simple avec la fonction mysql connect ou Ouverture d’une connexion persistante avec la fonction mysql pconnect

La deuxième méthode diffère de la première par le fait que la connexion reste active après la fin du script, mais tous les hébergeurs n’autorisent pas cette possibilité.

Pour se connecter, il faut paramétrer l’adresse du serveur de données ainsi que votre nom d’utilisateur (” login ” en anglais) et votre mot de passe (” password ” en anglais). En retour, vous obtenez un identifiant. Si l’identifiant est à 0, une erreur s’est produite pendant la phase de connexion. Cette erreur peut venir du fait que l’on ne peut pas joindre le serveur (ex : panne réseau), que le nom du serveur n’est pas bon, que vous n’êtes pas autorisé à accéder à ce serveur ou que votre mot de passe n’est pas correct. Maintenant, si l’identifiant est différent de 0, tout c’est bien passé et vous êtes connecté au serveur de données.

Remarque : Vous pouvez garder cet identifiant dans une variable, mais si vous n’ouvrez pas d’autres connexions en parallèle, ce n’est pas utile.

Exemple : connexion à une base de données sur ” Free ” :

<?php

if( mysql_connect( ’’ , ’monchat.moustique’ , ’miaou’ ) > 0 ) echo ’Connexion réussie !’ ;

else echo ’Connexion impossible !’ ;

?>

Exemple : connexion en local :

<?php

if( mysql_connect( ’localhost’ , ’root’) > 0 ) echo ’Connexion réussie !’ ;

else echo ’Connexion impossible !’ ;

?>

3.2   Sélection de la base

En fait, les étapes sélection et requête peuvent être faites en même temps, mais il est plus simple si vous utilisez une seule base, de la sélectionner avant de commencer vos requêtes. Ainsi, toutes les requêtes à venir utiliseront cette base par défaut. Pour faire cette sélection, utilisez la fonction mysql selectdb et vous lui passez en paramètre, le nom de votre base. Si la connexion n’aboutit pas, la fonction vous retourne ”False” (ou ”0” si vous préférez) sinon elle retourne ”True”.

Remarque : Si cela vous chante, ou si vous avez ouvert plusieurs connexions en parallèle, vous pouvez ajouter un second paramètre qui est l’identifiant de la connexion. Si vous n’en donnez pas, la fonction utilise la dernière connexion ouverte.

Exemple :

Connexion à la base de donneé " ma_base "

<?php

if( mysql_select_db( ’ma_base’ ) == True ) echo ’Sélection de la base réussie’ ;

else echo ’Sélection de la base impossible’ ;

?>

3.3   Requête

On utilise MySQL pour accéder aux données. Pour envoyer Les requêtes MySQL , on peut utiliser 2 fonctions :

–   mysql query dans le cas ou` la base de données serait déja` sélectionnée.

–   mysql dbquery dans le cas ou` l’on voudrait sélectionner la base en même temps.

Comme pour la connexion, cette fonction retourne un identifiant qui est à ”0” lorsqu’une erreur s’est produite. Contrairement aux autres fonctions (connexion et sélection), cet identifiant est très important, il est utilisé pour retrouver les données rapatriées par une requête de sélection.

Lorsque l’on fait une requête de sélection, MySQL retourne les données et PHP les place en mémoire. L’identifiant permet donc de retrouver ces données en mémoire. En fin de script, la mémoire est libérée et les données sont donc perdues. Il est possible de libérer la mémoire, pour ne pas surcharger le serveur, avant la fin du script au moyen de la commande mysql freeresult.

Exemple : On part du principe que la base de données est déja` sélectionnée et on veut avoir des informations sur le membre nommé ”moustique” :

<?php

$requete = "SELECT * FROM membres WHERE pseudo = ’moustique’ "; $resultat = mysql_query( $requete );

?>

3.4   Exploitation des requêtes

Après l’exécution d’une requête de sélection, les données ne sont pas ”affichées”, elles sont simplement mises en mémoire, il faut donc aller les chercher enregistrement par enregistrement et les afficher avec un minimum de traitement. PHP gère un pointeur de résultat, c’est à dire qu’il repère un enregistrement parmi les autres, et lorsque l’on veut en lire un, c’est celui qui est pointé qui sera retourné. Lorsque vous utilisez une fonction de lecture, le pointeur est déplacé sur l’enregistrement suivant et ainsi de suite jusqu’a` ce qu’il n’y en ait plus. Les fonctions qui retournent un enregistrement sont : mysql fetchrow, mysql fetcharray et mysql fetchobject et prennent comme paramètre l’identifiant de la requête. Les 3 exemples suivants partent d’une requête ”SELECT nom, prenom, date FROM membres.” mysql fetchrow :Cette fonction retourne un enregistrement sous la forme d’un tableau simple.



<?php

$enregistrement = mysql_fetch_row( $resultat );

// Affiche le champ - nom echo $enregistrement[0] . ’<br>’; // Affiche le champ - prenom echo $enregistrement[1] . ’<br>’; // Affiche le champ - date -

echo $enregistrement[2] . ’<br>’;

?>

mysql fetcharray : Cette fonction retourne un enregistrement sous la forme d’un tableau associatif.

<?php

$enregistrement = mysql_fetch_array( $resultat );

// Affiche le champ - prenom echo $enregistrement[’prenom’] . ’<br>’; // Affiche le champ - nom echo $enregistrement[’nom’] . ’<br>’; // Affiche le champ - date echo $enregistrement[’date’] . ’<br>’;

?>

mysql fetchobject :Cette fonction retourne un enregistrement sous forme d’une structure

(objet).

<?php

$enregistrement = mysql_fetch_object( $resultat );

// Affiche le champ - date echo $enregistrement->date . ’<br>’; // Affiche le champ - nom echo $enregistrement->nom . ’<br>’; // Affiche le champ - prenom echo $enregistrement->prenom . ’<br>’;

?>

Si il n’y a pas ou plus d’enregistrement à lire, ces fonctions retournent ”false.” Enfin, si vous voulez savoir combien d’enregistrements ont été retournés par la sélection, vous pouvez utiliser la commande mysql numrows qui prend comme paramètre l’identifiant de la requête.

3.5   Fermeture de la connexion

Vous pouvez fermer la connexion au moyen de la fonction mysql close, mais il est bon de savoir que cette opération sera faite lorsque le script se terminera.

3.6   Exemple de synthèse

Voici un exemple d’utilisation de MySQL avec PHP. Ce script PHP se connecte sur la base menagerie , séléctionne les noms et date de naissance des animeaux pour les afficher dans une page html.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"">

<html xmlns="; xml:lang="fr">

<head>

<title>ManipZoo</title>

<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" /> </head>

<body>

<?php

$mysqlserver = "localhost";

$mysqlloggin = "root";

//  $mysqlpassword = ’secret’;

$connexion= mysql_connect( $mysqlserver , $mysqlloggin ) ; // possiblement un 3 argt = le mot de passe // retourne 0 si erreur.

if (!$connexion){

echo "<p>connexion impossible au serveur </p> \n"; exit; }

if (!mysql_select_db("menagerie",$connexion)){ // celle ci fait la connexion a une base echo "<p>acces a la base refuse </p>\n";

exit; }

echo "<p>connexion a la base menagerie reussie<p>";

$requete = "SELECT nom, naissance FROM animal ORDER BY naissance";

// Execution de la reque^te

$resultat = mysql_query($requete, $connexion); if (!$resultat){

echo "<p>erreur a l’execution de la requete$requete <br />"; echo "message de mysql : ".mysql_error($connexion); echo "</p>"; exit; }

echo "<h3> affichage du resultat de la requete </h3>\n";

// Récupe´ration du nombre d’enregistrements $nombre_animaux = mysql_num_rows( $resultat ); echo "<p>". $nombre_animaux . " </p> \n "; echo " <ul>\n"; // boucle d’affichage

while( $row = mysql_fetch_array( $resultat ) ) {

echo "<li>";

echo $row[’nom’] . ’ ’ . $row[’naissance’] ;

echo "</li>\n";

} echo "</ul>\n";

?>

</body>

</html>



330