Vous êtes sur la page 1sur 15

Cration et gestion de site dynamique (PHP / MySQL)

Partie 2 : My SQL
Dernire mise jours par M. FAGROUD : Dccembre 2007

Le contenu de ce document est soumis la Licence de Documentation Libre GNU Free Documentation License

Prsentation
MySQL est une base de donnes implmentant le langage de requte SQL un langage relationnel trs connu. Cette partie suppose connue les principes des bases de donnes relationnelles. Il existe un outil libre et gratuit dvelopp par la communaut des programmeurs libres : phpMyAdmin qui permet ladministration aise des bases de donnes MySQL avec php. Il est disponible sur : http://sourceforge.net/projects/phpmyadmin/ et http://www.phpmyadmin.net. Avec MySQL vous pouvez crer plusieurs bases de donnes sur un serveur. Une base est compose de tables contenant des enregistrements. Plus d'informations sont disponibles http://www.mysql.com/.

La documentation de MySQL est disponibles http://www.mysql.com/documentation/, ainsi qu'en franais chez nexen : http://dev.nexen.net/docs/mysql/.

2/27

phpMyAdmin

3/27

Prsentation
Pour interroger une base de donnes, il est impratif de maitriser le language SQL. l'accs aux donnes se dcompose en plusieurs tapes :
1) 2) 3) 4) ouvrir la connexion sur le serveur MySQL ouvrir une connexion sur la base de donnes dfinir la requte excuter excuter la requte. On obtient les lignes du rsultat dans un RcordSet

5) 6) 7) 8)

extraire les donnes de chaque ligne du rsultat traiter les donnes (calcul ou affichage par exemple) fermer le RecordSet pour librer la mmoire fermer la connexion au serveur

4/27

Connexion (I)
Pour se connecter une base depuis php, il faut spcifier un nom de serveur, un nom dutilisateur, un mot de passe et un nom de base. 1) mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en tant quutilisateur $user avec le mot de passe $password, retourne lidentifiant de connexion (nombre positif) si la connexion s'est tablie avec succs et FALSE (0) sinon.
//connexion locale , login "root" et sans mot de passe $ma_connexion=mysql_connect("localhost","root",""); if ($ma_connexion ==False) //connexion choue { die("connexion impossible") //affiche le message puis // arrte le scrypte } echo "connexion russie"; // divers instructions

5/27

Connexion (II)
Une autre commande permettant la connexion un serveur est mysql_pconnect. Elle fonctionne de la mme manire que mysql_connect sauf que la connexion est persistante, il ny a donc pas besoin de rouvrir la connexion chaque script qui travaille sur la mme base.

Lors de la connexion, la fonction essaie de trouver une connexion permanente dj ouverte sur cet hte avec le mme nom d'utilisateur et mot de passe. Si une telle connexion est trouve, son $id est retourn, sans ouvrir une nouvelle connexion.
La connexion au serveur ne sera pas termine avec la fin du scrypte. Au lieur de cela, le lien sera conserv pour un prochain accs. Les connexions sont automatiquement fermes au bout dun certain temps en cas dabsence de toute activit

6/27

Connexion (III)
2) Une fois la connexion tablie, il faut indiquer la base o se trouvent les donnes traiter avec mysql_select_db. mysql_select_db($base[,$id]) : permet de choisir la base $base. La fonction retourne (sous le nom $id) True en cas de succs et False en cas d'chec. Toutes les reequtes excutes, par la suite, seront faites avec la base de donnes active.
$connect_base=mysql_select_db("mabase",$ma_connexion); if ($connect_base ==False) //si la base est inaccessible { die("base inaccessible") //affiche le message puis // arrte le scrypte } echo "accs correct la base"; // divers instructions

Rque : Les identifiants de connexion ne sont pas ncessaires si on ne se connecte qu une seule base la fois, ils permettent seulement de lever toute ambigut en cas de connexions multiples.
7/27

Interrogation
Pour envoyer une requte une base de donne, il existe la fonction : mysql_query($str) qui prend pour paramtre une chane de caractres qui contient la requte crite en SQL et retourne un identificateur de rsultat ou FALSE si chec. L'chec (la requte n'a pas pu s'excuter sur le serveur) est souvent li une erreur de syntaxe ou de droits insuffisants sur la base . Il est possible qu'une requte syntaxiquement correcte ne contienne aucune ligne de rsultat, elle retourne alors la valeur True.

8/27

Interrogation
Les requtes les plus couramment utilises sont : SELECT (slection), CREATE (cration dune table), INSERT (insertion), UPDATE (mise jour des donnes), DELETE (suppression), ALTER (modification dune table), etc.
$ma_selection="select nom, adresse from users" $resultat=mysql_query('$connect_base,$ma_selection) If ($resultat == False) { die("requte incorrecte : $ma_selection"); } Echo "requte correcte";

9/27

Connexion (?)
Pour les commandes DELETE, INSERT, REPLACE ou UPDATE la fonction mysql_affected_rows() permet de connatre le nombre de lignes concernes.
Pour les requtes SELECT, La fonction mysql_num_rows() retourne le nombre d'enregistrements qui rpondent la requte.
$resultat = mysql_query("select nom, prenom from ma_table"); $nb=mysql_num_rows($resultat); echo "il y a $nb enregistrements";

10/27

Extraction des donnes (I)


Une fois la requte effectue et lidentificateur de rsultat acquis, il ne reste plus qu extraire les donnes retournes par le serveur. Php possde plusieurs fonctions qui permettent le retour du rsultats issus d'une requte. selon la position du champ dans la requte (indice) Selon le nom du champ dans la table Travailler tout autant sur les noms que les positions

11/27

Extraction des donnes (II)


mysql_fetch_row($result) : retourne Une ligne de rsultat sous la forme dun tableau appele RecordSet. Les lments du tableau tant les valeurs des attributs de la ligne. Retourne FALSE sil ny a plus aucune ligne. Comme la fonctionne ne retourne qu'une seule ligne, il faudra boucler sur le nombre d'enregistrements prcdemment calculs. Exemple 1 :
B1) while($ligne = mysql_fetch_row($resultat)) { $id = $ligne[0]; $name = $ligne[1]; $address = $ligne[2]; echo $id - $name, $address <br />; } B2) For ($i=0; $i < mysql_num_rows($resultat); $i++) { $ligne=mysql_fetch_row($resultat); echo "$ligne[0] - $ligne[1] - $ligne[2] <br/>"; }
12/27

Extraction des donnes (III)


mysql_fetch_array($result) : retourne Une ligne d'enregistrements sous forme de tableau associatif. Les cls tant les noms des attributs et les valeurs associes leurs valeurs respectives. Retourne FALSE sil ny a plus aucune ligne.

On accde alors aux valeurs des champs par leur noms et non par leur indice.
Exemple 2 :
while($ligne = mysql_fetch_array($resultat)) {

$numero = $ligne["id]; $nom = $ligne["name]; $adresse = $ligne["address]; echo "$numero - $nom, $addresse <br />;
}

13/27

Extraction des donnes (IV)


mysql_fetch_object($result) : retourne un objet. Les attributs de lobjet correspondent ceux de la ligne de rsultat. Et les valeurs des attributs de lobjet correspondent ceux de la ligne de rsultat. Retourne FALSE sil ny a plus aucune ligne. Pour afficher les rsultats, on donne le nom de l'objet suivi du nomdu champ dans la base spars par ->. Exemple 3 :
while($ligne = mysql_fetch_object($resultat)) { $numero = $ligne->id; $nom = $ligne->name; $addresse = $ligne->address; echo $numero - $nom, $addresse <br />; }

14/27

Fonctions additionnelles
Quelques fonctions supplmentaires trs utiles : mysql_free_result($result) : efface de la mmoire du serveur les lignes de rsultat de la requte identifies par $requet. Trs utile pour amliorer les performances du serveur en vitant la saturation de la mmoire lors de l'excution du scrypte. mysql_close($ma_connexion) : ferme la connexion MySql. Elle n'est pas obligatoire *, car les connexions sont automatiquement fermes la fin du scrypte. mysql_num_fields($result) : retourne le nombre de champs du rsultats. mysql_list_fields($result) : liste les champs du rsultat MySql.

D'autres fonctions sont encore disponible pour la gestion des donnes.

15/27

Vous aimerez peut-être aussi