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. Connexion à la base
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. 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=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); [Ici on trouvera les autres requêtes et traitements de la base] mysqli_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 ! 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
4. 1. Les cas
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. 4. 2. Requêtes sans résultat
Une requête sans résultat peut avoir plusieurs intérêts : 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=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); $stmt = "CREATE TABLE Adresse (CodeA INT, AdresseA LONGTEXT, CodePostal CHAR(5) DEFAULT "35000");"; mysqli_query($link, $stmt); mysqli_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 "mysqli_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. 4. 3. Avec résultat
4.3.1. Introduction
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"). 4.3.2. Retour 'Objet'
Voici un exemple complet d'exécution d'une requête avec résultat : <?php Cette requête est un exemple de requêtes que je fais pour afficher les fêtes associées au mois de Janvier.$hostname="localhost"; $username="login"; $password="motdepasse"; $database="nomdelabase"; if ($link=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); $stmt = "Select * from FetesMois where Mois=1" $result = mysqli_query($link,$stmt); while ($row = mysqli_fetch_object($result)) { echo $row->Prenom."\n"; } mysqli_close($link); } ?> La, on voit que "mysqli_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 "mysqli_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=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); $stmt = "Select * from FetesMois where Mois=1" $result = mysqli_query($link,$stmt); while ($row = mysqli_fetch_object($result)) { echo $row->Prenom."\n"; echo $row->DateFete."\n"; } mysqli_close($link); } ?> Voila, j'espère que c'est assez clair... Sinon, demandez-moi ! 4.3.3. Retour 'Tableaux'
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 Comme vous pouvez le constater, les différences sont minimes : mysqli_fetch_array au lieu de mysqli_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.$hostname="localhost"; $username="login"; $password="motdepasse"; $database="nomdelabase"; if ($link=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); $stmt = "Select * from FetesMois where Mois=1"; $result = mysqli_query($link,$stmt); while ($row = mysqli_fetch_array($result)) { echo $row[0]."\n"; echo $row[1]."\n"; } mysqli_close($link); } ?> 5. Commandes spécifiques au PHP
5. 1. mysqli_create_db
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. <?php $hostname="localhost"; $username="login"; $password="motdepasse"; $database="nomdelabase"; if ($link=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); mysqli_create_db($database); mysqli_close($link); } ?> 5. 2. mysqli_drop_db
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=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); mysqli_drop_db($database); mysqli_close($link); } ?> 5. 3. mysqli_num_rows
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=mysqli_connect($hostname,$username,$password,$database)) { echo ("Ca marche"); $stmt = "Select * from FetesMois where Mois=1"; $result = mysqli_query($link,$stmt); $nbRetour = mysqli_num_rows($result); echo "Il y a ".$nbRetour." dans le résultat de la requête."; mysqli_close($link); } ?> 5. 4. mysqli_list_dbs
Fonction permettant de lister les bases créées pour le compte 5. 5. mysqli_list_tables
Fonction permettant de lister les tables existantes dans la base 5. 6. mysqli_list_fields
Fonction permettant de lister les champs existants dans la table 5. 7. mysqli_num_fields
Fonction renvoyant le nombre de champs existants dans la table 5. 8. mysqli_free_result
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. 5. 9. mysqli_insert_id
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 ! |