Vous êtes sur la page 1sur 8

Script : Utiliser MySQL avec PHP Sommaire

1. 2. 3. 4.
Intrt de MySQL ? Connexion MySQL Lecture de donnes Manipulation de donnes

Intrt de MySQL ?
MySQL est un SGBDR, c..d. qu'il contient des tables, lesquelles ont des attributs et une suite d'enregistrements. L'intrt d'utiliser une base de donnes se calcule ainsi : Le gain de temps vis--vis d'une autre mthode (l'criture dans un fichier pour PHP) ; Le prix (MySQL existe en version gratuite chez tous les hbergeurs qui le supportent) ; Le gain de puissance, 1000 interrogations + 1000 critures dans MySQL sont plus rapides et bien moins gourmandes en ressources CPU et mmoire que 1000 lectures de fichiers, puis 1000 modifications et rcritures de fichiers.

Une base de donnes, c'est un ensemble de donnes brutes, sans mise en forme, mais enregistres de manire ordonne. L'intrt d'utiliser MySQL dans un site web est celui de pouvoir grer des donnes en masse (suivi d'un stock, messages d'un forum ...) et d'effectuer des oprations dessus (commander au fournisseur tous les articles ayant un nombre restant en stock < 50 par exemple).

Connexion MySQL
La connexion MySQL via PHP se fait en 2 tapes. La premire tape est la connexion au serveur MySQL avec un identifiant et son mot de passe, et la seconde est le choix d'une base de donnes de travail. Un exemple de connexion est montr par le script connexion.php ci-dessous :

<?php // On dfinit les 4 variables ncessaires la connexion MySQL : $hostname = "adresse du serveur"; $user = "login";

$password = "mot de passe";

$nom_base_donnees = "newslettux";

// Connexion au serveur MySQL $conn = mysql_connect($hostname, $user, $password) or die(mysql_error());

// Choix de la base sur laquelle travailler mysql_select_db($nom_base_donnees, $conn); ?>


En faisant un include('connexion.php'); dans vos pages PHP, vous aurez ainsi la connexion MySQL. ATTENTION ! il est dconseill de mettre ces identifiants dans chaque fichier qui en a besoin, ceci pour 2 raisons : vous pouvez tre amen changer de serveur (changement d'hbergement, par exemple) et vous n'aurez qu'un seul fichier retoucher, au lieu de reprendre toutes vos pages une une; il vaut mieux, question scurit, placer ce connexion.php seul dans un dossier, protg par un htaccess : si on vous pirate votre site et que ce dossier est bien protg, les pirates n'auront pas accs votre base de donnes... peut tre permanente ou non, et elle se termine par

La connexion MySQL mysql_close(); :

<?php // ceci est le fichier connexion.php // On dfinit les 4 variables ncessaires la connexion MySQL : $hostname = "adresse serveur";

$user

= "user_mysql";

$password = "password_mysql"; $nom_base_donnees = "newslettux";

// Connexion permanente au serveur MySQL : mysql_Pconnect $conn = mysql_pconnect($hostname, $user, $password) or die(mysql_error());

// Choix de la base sur laquelle travailler mysql_select_db($nom_base_donnees, $conn); ?> <?php // ceci est le fichier lambda.php // on ouvre la connexion MySQL include('connexion.php');

// on fait les oprations ncessaires $req = "SELECT * FROM table WHERE condition"; $resultat = mysql_query($req);

// maintenant que la requte a t effectue, on peut refermer la connexion mysql_close(); ?>


La connexion permanente (pconnect) n'est pas accepte par tous les hbergeurs. Elle sert viter d'ouvrir une nouvelle connexion chaque appel de ce fichier. Attention, si l'instruction mysql_close() est trouve, vous ne pourrez plus effectuer de requte aprs, moins de rouvrir une connexion.

Lecture de donnes
Pour enregistrer, lire, modifier ou supprimer des donnes, il faut au pralable tablir une connexion MySQL comme indiqu plus haut via un fichier ressemblant connexion.php.

Dataset, datarow
Derrire ces 2 termes anglais se cachent des concepts. Le "dataset" se traduit en franais par "jeu de donnes", c'est la rponse directe de MySQL une requte. Le dataset contient 0, 1, 2 ... n enregistrements. Chaque enregistrement est un "datarow", datarow tant la ligne de donnes. En fait, lorsqu'on interroge MySQL, il retourne un bloc de rponses (dataset) que l'on va plucher avec php (datarow par datarow) nous supposons cette table MySQL nomme 'pieces' dcrite ci-aprs. Elle contient 5 colonnes, respectivement l'identifiant, la rfrence du produit, la dsignation, le fabricant et la quantit en stock :

id_piece -------10 12 15 250 251

reference --------PN-001 VS-008 EJV-405 PLQ-031 PH-100

designation ----------pneu vis enjoliveur plaque type 31 phare 100W

fabricant --------K-Outchou Vis Corp. Voiture Inc. Placo et Cie Lumen

stock ----25 1500 7 2 1

Les requtes des exemples suivants


Reportez-vous aux articles SQL pour plus d'informations, on imagine ici 2 requtes. Ces deux requtes vont nos permettre d'illustrer 2 exemples trs courants de la lecture de donnes MySQL. [Requte 1] => $req_piece_infos = "SELECT reference, designation, fabricant FROM pieces WHERE id_piece='15';"; [Requte 2] => $req_stock_commande = "SELECT reference FROM pieces WHERE stock < 10;";

Requte 1
Elle extrait de la base des infos sur une pice. Le dataset contient 1 seule ligne :

id_piece -------15

reference --------EJV-405

designation ----------enjoliveur

fabricant --------Voiture Inc.

stock ----7

Pour exploiter via PHP cette ligne, on utilise la commande mysql_fetch_array($dataset) : cette commande cre un tableau associatif o chaque cl correspond chaque colonne de la table, et chaque valeur chaque valeur lue du dataset :

<?php // on ouvre la connexion MySQL include('connexion.php');

// on fait les oprations ncessaires $req_piece_infos = "SELECT reference, designation, fabricant FROM pieces WHERE id_piece='15';"; $dataset_piece_infos = mysql_query($req_piece_infos) or die($req_piece_infos."<br />\n".mysql_error());

$piece = mysql_fetch_array($dataset_piece_infos); print_r($piece); ?>


ce print_r va afficher dans le code source :

Array( [id_piece] => 15 [reference] => EJV-405 [designation] => enjoliveur [fabricant] => Voiture Inc. [stock] => 7 )
Attention : les cls du tableau sont sensibles la casse, si la colonne MySQL s'appelle Fabricant ou fabricant, ce n'est pas la mme chose ! Il ne reste plus qu' afficher en PHP les infos voulues (exemple de code html dans une page nomme pieces.php) :

<ul> <li>Pice : <?php echo $piece['designation']; ?></li> <li>Fabricant : <?php echo $piece['fabricant']; ?></li> <li>Quantit en stock : <?php echo $piece['stock']; ?></li> </ul>

Seul souci : si le dataset a plus d'une ligne (ici il n'y a que la pice d'ID 15 qui est retourne par MySQL), que se passe-t-il ?

Requte 2
Lorsqu'elle sera excute, MySQL va retourner 3 lignes de la table. Il faudra donc plucher les lignes du dataset : si on applique un fetch_array directement, le tableau $piece ne contiendra que la dernire ligne du dataset ! (En ralit, PHP va plucher le dataset, mais va, chaque nouvelle ligne (datarow) lue, craser la prcdente, ce qui fait que seule la dernire ligne survit ...) La solution : boucler la lecture. Lire "tant que la fin n'est pas atteinte". voici en code la solution :

<?php // on ouvre la connexion MySQL include('connexion.php');

// on fait les oprations ncessaires $req_stock_commande = "SELECT reference, stock FROM pieces WHERE stock < 10;"; $dataset_stock_commande = mysql_query($req_stock_commande) or die($req_stock_commande."<br />\n".mysql_error());

// Maintenant on va lire le dataset ligne par ligne (datarow par datarow) echo '<p>Pices commander :</p>'; echo '<ul>';

while($commande = mysql_fetch_array($dataset_stock_commande))

{ echo ' <li>Rfrence : '.$commande['reference'].' (reste en stock : '.$commande['stock'].')</li>'; }; echo '</ul>'; ?>
Ceci va afficher :

<p>Pices commander :</p> <ul> <li>Rfrence : EJV-405 (reste en stock : 7)</li> <li>Rfrence : PLQ-031 (reste en stock : 2)</li> <li>Rfrence : PH-100 (reste en stock : 1)</li> </ul>

Manipulation de donnes
Manipuler des donnes, c'est les lire (nous venons de le voir), les mettre jour, en insrer ou en supprimer. La manipulation est toujours la mme : Vrifier qu'une connexion MySQL est ouverte, en ouvrir une si besoin ; Prparer la requte ; Excuter la requte.

Attention : vitez de faire la requte directement dans mysql_query, prparez-la en variable d'abord. Les avantages de cette mthode sont le dbuggage et la rutilisation de la requte s'il y en a besoin plus loin.