|
 |
| | |  |  |  |  |  | Les Bases de Données en PHP
|  |  |  |  |  |  |
| | | | | | | | | 1. Qu'allons nous faire ici ?
|  |  |  |
|
Une base de données est un espace de stockage formalisé dans lequel on enregistre des informations.
Si vous voulez plus d'informations sur le sujet, cliquez-ici.
Nous allons donc, dans cette page, expliquer comment interroger une base de données au format MySQL depuis du code PHP.
Si vous avez besoin de savoir comment installer PHP ou MySQL sur votre machine, cliquez-ici.
| | | | | | | | | 2. Principe d'utilisation
|  |  |  |
|
Dans un premier temps, il est nécessaire de se connecter à la base de données. Une fois cette connexion établie, on
peut exécuter des requêtes sur la base afin d'afficher des informations, de les modifier, et de changer la structure
de la base (les tables).
Pour se faire, il est donc important dans un premier temps de savoir que nous allons essentiellement traiter de
l'interaction entre MySQL et PHP, et pas de comment écrire une requête SQL (Si vous voulez savoir comment écrire
une requête SQL, c'est ici).
Ceci entraîne donc le découpage de cette partie par grand thème : la connexion à la base, l'exécution de requêtes,
les fonctions spécifiques de PHP pour agir sur MySQL.
| | | | | | | | | 3. 1. Informations de base (c'est pas un jeu de mot)
|  |  |  |
|
Il est primordial, afin de ne pas se cogner la tête contre les murs, de connaître les host, login et mot de passe
de connexion à MySQL avant d'aller plus loin. Ces mots de passe diffèrent sur chaque machine, mais le client standard
est root, et il n'y a pas de mot de passe par défaut.
Si vous êtes hébergés ailleurs que chez vous, c'est votre hébergeur qui doit vous fournir ces informations.
Le Host est le serveur où est hébergé votre base de données. Si il est hébergé au même endroit que votre
site web, c'est souvent "localhost", sinon, vous devez récupérer le nom de la machine auprès de votre hébergeur.
Le Login est le nom d'utilisateur. Il permet de limiter l'accès à certaines fonctionnalités de MySQL et ce
uniquement à certains utilisateurs et pas à tous. On peut ainsi définir un utilisateur qui peut lister, un autre qui
peut écrire...
Le mot de passe est celui qui correspond évidemment au login !
| | | | | | | | | 3. 2. Exemple de connexion
|  |  |  |
|
Voici un exemple de connexion à une base de données :
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_select_db($database,$link);
[Ici on trouvera les autres requêtes et traitements de la base]
mysql_close($link);
}
?>
Ce code peut s'appliquer à toutes les connexions à MySQL. Il suffit pour cela de modifier les paramètres "$hostname",
"$username", "$password" et "$database" en fonction de votre configuration personnelle.
Grâce à ce code, on teste la connexion à la base de donnée afin d'aller plus loin. Ceci est plus intéressant qu'un "die" qui
va arrêter le traitement, donc si vous avez d'autres choses à afficher après, c'est fichu !
La fonction "mysql_connect" permet de se connecter à une base de données. Elle renvoie en paramètre la configuration
de connexion qui s'utilise telle quelle par la suite. Les paramètres standard de cette fonction sont le host, le user et le pass. Il
est possible de préciser en plus du host le port de connexion, ce qui sert si on se connecte ailleurs qu'en localhost (c'est à dire
en serveur local). Dans ce cas, on précise par exemple : $hostname="mysql.free.fr:1531"
Si la connexion peut être ouverte, on affiche alors le texte "Ca marche", puis on sélectionne la base de données qui nous intéresse
grâce à la fonction "mysql_select_db". Cette fonction utilise en premier paramètre le nom de la base à ouvrir (ici
la variable "$database" et comme second paramètre la connexion établie à la base grâce au résultat de la
fonction "mysql_connect", donc "$link" ici.
On termine avec la fonction "mysql_close" qui permet de fermer la connexion à la base. Le seul paramètre est
celui permettant d'identifier la base, c'est à dire "$link".
Il n'est pas obligatoire d'utiliser dans les fonctions le paramètre "$link", mais c'est conseillé car
plus facile à relire. L'intérêt est en fait la possibilité d'ouvrir des connexions simultanément à plusieurs bases.
| | | | | | | | | 4. Requêtes SQL depuis PHP
|  |  |  |
|
Une requête SQL peut être de 2 types : requêtes avec renvoi de résultat, requêtes sans renvoi de résultat.
Nous allons donc d'abord voir le cas sans résultat, puis nous verrons ensuite avec résultat.
Pour pouvoir faire une requête ou toute autre action sur une base de données,
il est nécessaire de s'être connecté à la base, le script de connexion sera donc présent dans chaque page qui
accède à la base !
Si vous avez besoin d'aide pour la rédaction de requête SQL,
cliquez-ici
| | | | | | | | | 4. 2. Requêtes sans résultat
|  |  |  |
|
Une requête sans résultat peut avoir plusieurs intérêts :
Créer des tables
Modifier la structure des tables
Modifier le contenu des tables (ajout, modification, suppression...)
Voici un exemple complet d'exécution d'une requête sans résultat :
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_select_db($database,$link);
$stmt = "CREATE TABLE Adresse (CodeA INT,
AdresseA LONGTEXT,
CodePostal CHAR(5) DEFAULT "35000");";
mysql_query($stmt, $link);
mysql_close($link);
}
?>
Le script de connexion à la base est le même que celui présenté en haut de page.
Le code de la requête SQL est stocké dans la variable "$stmt". Il n'y a pas de règles sur le nom de la variable
pour la requête, j'aurai aussi pu mettre "$cestlenomdemapremiererequetequejeveuxexecuter", mais ça aurait été
moins pratique.
Ensuite, la fonction "mysql_query([Requête SQL], [Connexion])" permet donc d'exécuter cette requête.
Ce code permet donc de créer une table avec 3 champs : CodeA, AdresseA et CodePostal.
Si vous avez besoin d'aide pour cette requête,
cliquez-ici
Le traitement des requêtes SQL se fait très simplement, et différentes options sont proposées pour le traitement.
Il est par exemple possible d'avoir un résultat de type "Objet" ou de type "Tableau". La différence est simple :
dans un cas, on accède aux champs grâce à leur noms (cas "Objet"), dans l'autre, on y accède grâce au numéro
du champs (premier, deuxième, ... n-ième... Cas "Tableaux").
Voici un exemple complet d'exécution d'une requête avec résultat :
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_select_db($database,$link);
$stmt = "Select * from FetesMois where Mois=1"
$result = mysql_query($stmt,$link);
while ($row = mysql_fetch_object($result)) {
echo $row->Prenom."\n";
}
mysql_close($link);
}
?>
Cette requête est un exemple de requêtes que je fais pour afficher les fêtes associées au mois de Janvier.
La, on voit que "mysql_query" renvoie un résultat, qui est lui même copié dans la variable $result.
Cette fonction renvoie donc tous les résultats pour la requête SQL passée en paramètre.
Ensuite, on retrouve la partie importante du traitement des résultats : le while !
La fonction "mysql_fetch_object" récupère le premier enregistrement du résultat de la requête et le donne à la
variable $row. La variable row devient donc un "objet" avec comme différents champs les champs résultant de la requête.
Dès qu'on arrive à la fin du traitement, c'est à dire à la dernière ligne de la requête, la valeur de $row passe à null,
et le "while" renvoie faux. La boucle s'arrête et on a traité toutes les lignes...
Dans ma table FetesMois, j'ai un champs nommé "Prenom", et donc, je retrouve ce champs dans la variable $row.
Donc, pour accéder à ce champs, j'utilise la variable : $row->Prenom
Je n'ai besoin que de ce champs, donc, c'est celui que j'affiche, et ensuite, je passe au suivant. Mais, si j'avais
besoin également d'afficher la date, je mettrai :
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_select_db($database,$link);
$stmt = "Select * from FetesMois where Mois=1"
$result = mysql_query($stmt,$link);
while ($row = mysql_fetch_object($result)) {
echo $row->Prenom."\n";
echo $row->DateFete."\n";
}
mysql_close($link);
}
?>
Voila, j'espère que c'est assez clair... Sinon, demandez-moi !
En reprenant l'exemple précédant, si le champs "Prenom" est le premier, le champs "DateFete" le second
et le champs "Mois" le troisième, voici comment on pourrait écrire la requête précédente :
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_select_db($database,$link);
$stmt = "Select * from FetesMois where Mois=1";
$result = mysql_query($stmt,$link);
while ($row = mysql_fetch_array($result)) {
echo $row[0]."\n";
echo $row[1]."\n";
}
mysql_close($link);
}
?>
Comme vous pouvez le constater, les différences sont minimes : mysql_fetch_array au lieu de mysql_fetch_object. Ceci permet
de créer un tableau au lieu d'un enregistrement. L'appel du champs qui nous intéresse est fait avec le "$row[0]". On
comprend donc que le premier champs porte le numéro 0, 1 pour le suivant... C'est à dire que le résultat obtenu
est un tableau d'autant de cellule que de champs indexé à partir de 0.
| | | | | | | | | 5. Commandes spécifiques au PHP
|  |  |  |
|
Fonction utilisée pour la création d'une base.
En fait, lorsque vous vous connectez à MySQL, vous êtes connectés à une base "mère", dans laquelle vous devez créer vos bases
de données. Comme nous l'avons vu plus haut, il est nécessaire de faire un "mysql_select_db" pour utiliser une base, ceci n'est
possible que si la base a été crée...
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_create_db($database);
mysql_close($link);
}
?>
Fonction utilisée pour la suppression d'une base.
Attention, ceci supprime toutes les informations d'une base, les tables incluses, et tout ce qui dépend de la table.
Cette commande n'est donc à utiliser que si vous en êtes certains.
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_drop_db($database);
mysql_close($link);
}
?>
Cette fonction permet de savoir combien on a de ligne dans le résultat de la requête.
<?php
$hostname="localhost";
$username="login";
$password="motdepasse";
$database="nomdelabase";
if ($link=mysql_connect($hostname, $username, $password)) {
echo ("Ca marche");
mysql_select_db($database,$link);
$stmt = "Select * from FetesMois where Mois=1";
$result = mysql_query($stmt,$link);
$nbRetour = mysql_num_rows($result);
echo "Il y a ".$nbRetour." dans le résultat de la requête.";
mysql_close($link);
}
?>
Fonction permettant de lister les bases créées pour le compte
Fonction permettant de lister les tables existantes dans la base
Fonction permettant de lister les champs existants dans la table
Fonction renvoyant le nombre de champs existants dans la table
Fonction effaçant le résultat d'une requête de la mémoire.
Ceci n'est utile que pour libérer de la mémoire afin la fin de l'exécution d'un script si vous manquez de mémoire.
Fonction renvoyant le dernier identifié généré par MySQL (par exemple, un champs auto incrémenté...)
| | | | | | | | | 6. phpmyadmin, qu'est-ce donc que ça ???
|  |  |  |
|
PHPMyAdmin est une interface faite en PHP permettant l'administration d'une base MySQL. Cette interface est assez puissante.
Etant en PHP, elle s'incluant au site web, et permet ainsi la gestion de tout une base uniquement via un serveur web.
Ce soft est livré en tant que fichier zip avec toutes les pages nécessaires à l'administration, il y a juste quelques paramètres
à saisir, telle que le serveur où la base est hébergée, le login, le mot de passe et le nom de la base. Ensuite, PHPMyAdmin gère
tout... Il n'y a plus rien à faire !
|
|