Apres avoir vu ce qu'etait une base de donnees et decouvert comment fonctionnait PHPMyAdmin dans le chapitre precedent, nous allons maintenant nous interesser a la partie PHP, car n'oubliez pas que PHP va vous permettre de communiquer avec votre base de donnees. Dans ce chapitre, on utilisera toujours PHP pour communiquer avec MySQL, mais sachez qu'il est tout a fait possible d'entrer les requetes a la main dans ce qu'on appelle une console (pour voir la console Windows, cliquez sur demarrer, Executer et tapez cmd).
Avant toute chose, il faut que vous sachiez qu'on ne fait pas directement une requete avec une fonction PHP. Il faut d'abord passer par plusieurs etapes. Un SGBD dispose ainsi de droits d'acces et peut comporter plusieurs bases. Il faut donc tout d'abord s'identifier au serveur MySQL que l'on souhaite utiliser. Une fois cette identification faite, il faut selectionner la base sur laquelle on souhaite travailler. Et apres ca, vous pourrez effectuer vos requetes ! Voyons comment cela fonctionne.
La premiere etape consiste a se connecter au serveur MySQL. Pour cela, on utilise la fonction mysql_connect() de PHP. Elle prend trois arguments :
Ces trois parametres vous sont fournis par votre hebergeur. Lorsque vous travaillez avec EasyPHP ou Wamp, les parametres a utiliser sont :
et il n'y a pas de mot de passe a renseigner.
Voila comment vous pouvez coder ca pour un usage local :
<?php
$connexion = mysql_connect('localhost', 'root', '') OR die('Erreur de connexion');
?>
La partie OR die('Erreur de connexion') n'est pas indispensable, mais elle permet de couper le script si il n'a pas reussi a se connecter au serveur. Il est important pour une application securisee de bien gerer les erreurs que vous pouvez avoir a la connexion ou lors de la selection de base de donnees (on va voir ca tout de suite)
Une fois que vous etes connecte au serveur MySQL, sachant qu'il peut contenir une infinite de bases de donnees, il faut bien qu'il sâche sur laquelle vous souhaitez travailler. On utilise pour cela la fonction mysql_select_db() en PHP. Elle prend comme parametre le nom de la base de donnees que vous souhaitez utiliser.
Pour ceux qui ont suivi le chapitre precedent, j'avais utilise une base actualites. Tous mes exemples vont donc s'appuyer sur cette base que nous avons creee ensemble. Voici comment dire a PHP que nous allons travailler sur cette base :
<?php
mysql_select_db('actualites') OR die('Selection de la base impossible');
?>
Encore une fois, la partie OR die('Selection de la base impossible') n'est pas indispensable mais conseillee.
Il s'agit d'une etape tres importante et trop souvent negligee dans de nombreux scripts. Il faut savoir que MySQL dispose d'un parametre specifiant le nombre maximum de connexions simultannees qu'il peut traiter. En local, vous n'aurez pratiquement jamais de probleme avec ce parametre (qui se manifeste par une erreur de Max user connections et vous empeche donc d'effectuer vos requetes). En revanche, chez un hebergeur, ce parametre est souvent place a une valeur de 3 ou de 5 (5 etant preferable). Cela veut dire que 5 connexions pourront avoir lieu quasiment simultanement. Vous vous dites "c'est enorme, il n'y aura jamais personne en meme temps qui pourra cliquer sur mon site". Le probleme, est que la connexion est par defaut, si vous ne la fermez pas, active pendant toute la duree de generation de la page. Si vous ouvrez votre connexion tout en haut de la page et que le serveur met 1 seconde (ce qui est enorme) pour generer la page, votre connexion restera ouverte pendant une seconde. Vous imaginez qu'il devient alors tres facile d'avoir 5 connexions a la meme seconde pour peu que vous ayez un peu de visiteurs ou des scripts tres lents. Il faut donc fermer la connexion le plus tôt possible, apres avoir effectue la derniere requete, et AVANT TOUT TRAITEMENT.
Vous allez voir tout a l'heure que nous allons utiliser la fonction mysql_query() pour effectuer des requetes MySQL, et bien voici un schema qu'il faudrait adopter pour beneficier d'une optimisation maximum :
<?php
$connexion = mysql_connect('localhost', 'root', '') OR die('Erreur de connexion');
mysql_select_db('actualites') OR die('Erreur de selection de la base');
$requete1 = mysql_query('....');
$requete2 = mysql_query('....');
//Ici vous placez vos autres requetes
mysql_close(); //On ferme la connexion a MySQL
//Ici vous mettez le code PHP qui va aller recuperer les donnees provenant des requetes (fonction mysql_fetch_row() par exemple)
?>
Comme vous pouvez le voir, on utilise la fonction mysql_close() pour fermer la connexion au serveur MySQL. Par defaut, elle ne prend pas de parametre.
Avant de lire des donnees dans une table, il faut que votre table contienne des enregistrements. On va se servir toujours de la meme table que precedemment, c'est a dire la table news. Vous pouvez y inserer quelques enregistrements via PHPMyAdmin, comme je vous l'ai deja montre au chapitre precedent.
Qu'il s'agisse d'une lecture, d'une ecriture ou d'une modification de donnees ou de parametres, il vous faudra passer par la fonction mysql_query(). Query signifie requete en anglais. C'est cette fonction qui va vous permettre d'interagir avec MySQL.
<?php
$requete = mysql_query('Ici
votre requete SQL');
?>
Le resultat de la requete sera retourne dans la variable $requete. Attention, il s'agit d'une variable de type resource. Vous ne pourrez donc pas faire un echo de cette variable, ca ne vous renverra pas ce que vous attendez. On va en reparler juste apres ;)
Voyons comment effectuer une requete de selection de certains champs :
En SQL, lorsque vous souhaitez selectionner des donnees provenant d'une table, on utilise tout d'abord le mot SELECT, qui veut dire que vous vous appretez a recuperer des donnees. Ensuite, vous devez indiquer a MySQL la liste des champs de la table que vous souhaitez voir dans votre resultat, separes par des virgules. Vous devez ensuite indiquer a quelle table vous souhaitez prendre les donnees via le mot cle FROM suivi du nom de la table
Si nous souhaitons recuperer les champs titre et texte de la table news, voici comment nous allons proceder :
<?php
$requete = mysql_query('SELECT titre, texte FROM news');
?>
Bon c'est bien beau tout ca, mais comment fait-on pour recuperer le resultat d'une requete sous forme textuelle ? Et bien on utilise pour cela quatre fonctions de PHP (en fait on en utilise une parmis les quatre). Voila les trois fonctions que vous pouvez utiliser :
Voyons voir ce que ca donne pour selectionner tous les enregistrements de la table actualites, et les afficher :
<?php
mysql_connect('localhost', 'root', '') OR die('Erreur de connexion a la base');
mysql_select_db('actualites') OR die('Erreur de selection de la base');
$requete = mysql_query('SELECT titre, texte FROM news') OR die('Erreur de la requete MySQL');
mysql_close();
/**
* On recupere les donnees
* Tant qu'une ligne sera presente, la boucle continuera
*/
while($resultat = mysql_fetch_object($requete))
{
echo '<p>Titre : '.$resultat->titre.'. Texte : '.$resultat->texte.'</p>';
}
?>
Avec la fonction mysql_fetch_row(), voici ce que ca aurait donne :
<?php
mysql_connect('localhost', 'root', '') OR die('Erreur de connexion a la base');
mysql_select_db('actualites') OR die('Erreur de selection de la base');
$requete = mysql_query('SELECT titre, texte FROM news') OR die('Erreur de la requete MySQL');
mysql_close();
/**
* On recupere les donnees
* Tant qu'une ligne sera presente, la boucle continuera
*/
while($resultat = mysql_fetch_row($requete))
{
echo '<p>Titre : '.$resultat[0].'. Texte : '.$resultat[1].'</p>';
}
?>
Et avec la fonction mysql_fetch_assoc() (equivalente a la fonction mysql_fetch_array() a laquelle on passe une constante en second parametre : MYSQL_ASSOC) :
<?php
mysql_connect('localhost', 'root', '') OR die('Erreur de connexion a la base');
mysql_select_db('actualites') OR die('Erreur de selection de la base');
$requete = mysql_query('SELECT titre, texte FROM news') OR die('Erreur de la requete MySQL');
mysql_close();
/**
* On recupere les donnees
* Tant qu'une ligne sera presente, la boucle continuera
*/
while($resultat = mysql_fetch_assoc($requete)) //equivalent a while($resultat = mysql_fetch_array($requete, MYSQL_ASSOC))
{
echo '<p>Titre : '.$resultat['titre'].'. Texte : '.$resultat['texte'].'</p>';
}
?>
Pour tout ce qui est insertion de donnees, je vous conseille de lire les requetes MySQL associees dans ce cours : requetes MySQL d'insertion de donnees. Le principe est le meme, sauf que la on ne recupere aucun resultat.