6.Le langage PHP
6.15.Utilisation de bases de données avec PHP
6.15.4.Utilisation de MySQL avec PHP
6.15.4.1.Introduction
Nous avons choisi de traiter plus particulièrement MySQL car c'est cette base de données que l'on retrouve chez la plupart des hébergeurs. Et suffit à répondre aux besoins de la plupart des sites web.
L'accès à une base de données se réalise en 3 étapes:
- La connexion
- La requête SQL
- La déconnexion
|
6.15.4.2.La connexion
Avant de faire le moindre accès à une base de données, il faut impérativement établir une connexion et choisir sa base de données (en effet un serveur de bases de données peut donner accès à plusieurs bases même si les hébergeurs gratuits - ou presque - n'en proposent généralement qu'une seule).
Cela se fait de la manière suivante:
<?php
$serveurBD = "localhost";
$nomUtilisateur = "toto";
$motDePasse = "secret";
$baseDeDonnees = "mabase";
mysql_connect($serveurBD,
$nomUtilisateur,
$motDePasse);
$connexionReussie = mysql_select_db($baseDeDonnees);
// Et pour mettre fin à la connexion
mysql_close();
?>
-
$serveurBD est le nom (ou adresse IP) du serveur où se trouve la base de données MySQL (C'est une information qui vous est donnée par votre hébergeur. Chez vous, en local, c'est "localhost")
-
$nomUtilisateur est l'identifiant sous lequel vous souhaitez vous connecter à la base de données (C'est également une information qui vous est donnée par votre hébergeur). Chez vous par défaut, c'est généralement "root".
-
$motDePasse est le mot de passe associé à l'identifiant ci-dessus (Ceci est également communiqué par votre hébergeur). Chez vous c'est une chaîne vide par défaut.
-
$baseDeDonnees est un nom de base de données qui doit exister (voir également avec votre hébergeur). Chez vous, vous devrez en créer une en passant par exemple par PHPMyAdmin (A vous de choisir son nom).
|
mysql_connect() retourne un identifiant de connexion ou FALSE en cas d'échec.
Voici un exemple concret en local:
<?php
$serveurBD = "localhost";
$nomUtilisateur = "root";
$motDePasse = "";
$baseDeDonnees = "mabase";
$idConnexion = mysql_connect($serveurBD,
$nomUtilisateur,
$motDePasse);
if ($idConnexion !== FALSE) echo "Connexion au serveur réussie";
else echo "Echec de connexion au serveur";
$connexionBase = mysql_select_db($baseDeDonnees);
if ($connexionBase) echo "Connexion à la base réussie";
else echo "Echec de connexion à la base";
// Et pour mettre fin à la connexion
mysql_close();
?>
mysql_select_db() renvoie un booléen utile pour savoir si la connexion a été réussie.
Avant de poursuivre plus avant, après avoir créé une base de données, assurez-vous que lorsque vous exécutez le script précédent vous voyez s'afficher les 2 messages de connexions réussies. Sinon, il vous faudra vous assurer que votre serveur de base de données tourne bien, que la base existe et que vous avez indiqué les bons paramètres au niveau du script.
On peut aussi utiliser une autre méthode pour stopper le script si la connexion ne peut pas se faire (inutile d'essayer d'accéder à la base si le serveur n'est pas accessible) :
<?php
$serveurBD = "localhost";
$nomUtilisateur = "root";
$motDePasse = "";
$baseDeDonnees = "mabase";
@mysql_connect($serveurBD,
$nomUtilisateur,
$motDePasse)
or die("Impossible de se connecter au serveur de bases de données.");
@mysql_select_db($baseDeDonnees)
or die("Cette base de donnees n'existe pas");
// Et pour mettre fin à la connexion
mysql_close();
?>
or
die("") permet d'afficher un texte et de stopper le script si la fonction précédente renvoie une erreur.
Notez que pour ne pas avoir à l'écran les messages d'erreur remontés par PHP, il suffit de mettre un @ devant les appels aux fonctions, par exemple
@mysql_connect()
6.15.4.3.La deconnexion
Comme vous avez pu le voir dans les exemples précédents, la déconnexion se fait par appel à la fonction mysql_close().
Il est indispensable, de faire appel à cette fonction avant la fin de l'execution du script PHP. Sinon, les ressources ne sont pas libérées et cela peut conduire à ce que la base de données devienne (pour un temps) inaccessible (le nombre de connexions pouvant être simultanément ouvertes étant généralement limité).
6.15.4.4.Requête SQL ne retournant pas de résultat (ex: CREATE TABLE, INSERT, UPDATE, etc.)
Pour exécuter une requête SQL nous pouvons faire appel à la fonction
mysql_query().
<?php
$serveurBD = "localhost";
$nomUtilisateur = "root";
$motDePasse = "";
$baseDeDonnees = "mabase";
@mysql_connect($serveurBD,
$nomUtilisateur,
$motDePasse)
or die("Impossible de se connecter au serveur de bases de données.");
@mysql_select_db($baseDeDonnees)
or die("Cette base de donnees n'existe pas");
$sql = "CREATE TABLE IF NOT EXISTS exemple1 ".
"(id INTEGER PRIMARY KEY AUTO_INCREMENT,".
"nom VARCHAR(128))";
$retour = mysql_query($sql);
if ($retour === FALSE) {
echo "La requête CREATE TABLE a échoué.";
} else {
echo "La table exemple1 a été créé.";
}
$sql = "INSERT INTO exemple1 (nom) VALUES ('Exemple phpfacile')";
$retour = mysql_query($sql);
if ($retour === FALSE) {
echo "La requête INSERT a échoué.";
} else {
echo "Un nouveau nom a été ajouté dans la table exemple1.";
}
// Et pour mettre fin à la connexion
mysql_close();
?>
Avec ce script, nous créons une table exemple1 puis nous y inserons un nom.
|
- Si la table exemple1 existe déjà, elle ne sera pas recréée (si elle est différente de celle que nous voulons créer l'insertion risque d'échouer).
- Si vous exécutez plusieurs fois ce script, le nom sera inséré plusieurs fois (nous n'avons pas mis de contrainte d'unicité).
|
6.15.4.5.Requête SQL retournant des résultats (ex: SELECT)
Pour une requête de type SELECT, nous ferons également appel à la fonction
mysql_query() mais le traitement sera légèrement différent.
<?php
$serveurBD = "localhost";
$nomUtilisateur = "root";
$motDePasse = "";
$baseDeDonnees = "mabase";
@mysql_connect($serveurBD,
$nomUtilisateur,
$motDePasse)
or die("Impossible de se connecter au serveur de bases de données.");
@mysql_select_db($baseDeDonnees)
or die("Cette base de donnees n'existe pas");
$sql = "SELECT * FROM exemple1";
$retour = mysql_query($sql);
if ($retour === FALSE) {
echo "La requête SELECT a échoué.";
} else {
while ($enreg = mysql_fetch_array($retour)) {
echo $enreg["id"]."-".$enreg["nom"]."<br />\n";
}
}
// Et pour mettre fin à la connexion
mysql_close();
?>
Avec ce script, nous listons les noms stockés dans la table exemple1 créée précédemment.