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.

  • 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=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 !
  • La fonction "mysqli_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".
  • On termine avec la fonction "mysqli_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



      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.

    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=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.

    Si vous avez besoin d'aide pour cette requête, cliquez-ici



      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
      $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);
      }
    ?>
    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 "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
      $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);
      }
    ?>
    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.



      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 !





    Page modifiée le : 24/07/2003
    Site modifié le : 16/05/2016


    Valid XHTML 1.0 Transitional

  •