10-Connexion à une base de données MySQL en PHP (Extension MySQLi)

Bases de données et PHP

PHP est connu pour sa capacité à intéragir aisément avec les bases de données. J’entends par les bases de données pratiquement tous les SGBD (Systèmes de Gestion de Bases de Données) populaires (MySQL, PostgreSQL, MariaDB, Oracle, MSSQL…). Cependant, le SGBD MySQL reste le plus largement utilisé avec PHP.

Afin d‘ interagir avec une base de données MySQL, PHP propose trois méthodes différentes:

  • Extension MySQL originale: Il s’agit de l’extension MySQL native au PHP. Pendant longtemps elle a été pratiquement la seule extension disponible, mais elle est rendue obsolète depuis la version 5.5 de PHP, et a été supprimée en PHP7.
  • Extension MySQLi: Il s’agit d’une extension un peu plus moderne. C’est d’ailleurs cette extension que l’on va traiter dans cette section.
  • Objet PDO (PHP Data Objects): L’objet PDO constitue de loin la meilleure solution pour intéragir avec une base de données en PHP. Elle dispose de plusieurs avantages, et le plus marquant c’est qu’il permet l’abstraction de la base de données, ce qui a pour effet de pouvoir communiquer avec de nombreux SGBD (et pas que MySQL) tout en maintenant le même code PHP

Extension MySQLi

Il est évident que pour éditer du code PHP qui peut communiquer avec une base de données (en l’occurence MySQL), il faut être à l’aise avec le langage de requêtes SQL (Structured Query Language)

SQL est un langage qui permet de communiquer avec les bases de données (dites bases de données SQL). Il s’agit d’un langage très riche en fonctionnalités qui permettent de mener des opérations plus ou moins complexes sur les bases de données. Cependant, dans cette section on va se contenter des requêtes CRUD (Create, Read, Update, Delete) qui constituent les requêtes les plus utilisées pour créer un site Web dynamique ou application Web.

  • Prise en charge de l’extension MySQLi

L’extension MySQLi est prise en charge nativement en PHP. Sa déclaration est faite de manière automatique dans le fichier php.ini dans le bloc consacré aux extensions de la manière suivante:

  • Opérations CRUD à l’aide de MySQLi

Création de la base de données

Afin de créer la base de données sur le serveur, ainsi que les tables et aussi créer les utilisateurs en leur accordant les privilèges nécessaires, il est préférable de se servir de l’outil PHPMyAdmin qui propose une interface graphique pour gérer les bases de données MySQL. Cependant, ces opérations peuvent être faites sur la ligne de commande si vous êtes à l’aise avec le langage SQL.

Dans notre cas, on va supposer que l’on va créer une base de données du nom utilisateur et l’utilisateur root avec le mot de passe ‘ ‘.

CREATE TABLE `user` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `username` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
 `statut` varchar(100) NOT NULL,
    `age` int NOT NULL,

 PRIMARY KEY (`id`)
);

Connexion au serveur et sélection d’une base de données

La première opération à faire si on veut interroger une base de données c’est la connexion au serveur qui héberge celle-ci à l’aide du code suivant:

La fonction mysqli_connect() permet de connecter le serveur de base de données avec l’utilisateur root qui a le mot de passe «  » (respectivement deuxième et troisième arguments). Dans notre cas, le serveur de base de données et le serveur local localhost (premier argument).

La fonction mysqli_connect() retourne un identifiant de connexion ($id dans notre cas) ou la valeur booléenne false en cas d’échec.

Execution des opérations CRUD

Afin d’exécuter une requête SQL via un script PHP on fait appel à la fonction mysqli_query(). Par exemple, si on veut insérer un nouvel enregistrement dans la table user on va exécuter le code suivant:

La fonction mysqli_query() accepte deux arguments qui sont, respectivement, l’identifiant de la connexion précédemment établie et la requête SQL à exécuter.

La fonction mysqli_query() retourne un identifiant de connexion ($result dans notre cas) ou false en cas d’échec.

ØSi on veut modifier l’enregistrement que l’on vient d’insérer (on va changer le username par exemple) alors on va exécuter l’instruction suivante:

Bien entendu, on a supposé que le champ id associé à cet enregistrement vaut 1.

Si maintenant on veut supprimer cet enregistrement alors on exécute le code PHP suivant:

Exécution de la requête de sélection

Bien que la sélection fait aussi partie des opérations CRUD, elle demande quand même un peu plus de traitement. Alors, supposons que l’on veut afficher les username et email de tous les enregistrements qui figurent dans la table user (s’il y’en a). Dans ce cas on exécute les instructions suivantes:

Une fois la requête de sélection exécutée, on prévoit la boucle while qui sera exécutée autant de fois qu’il y a des enregistrements dans la table.

La fonction mysqli_fetch_assoc() qui accepte comme argument l’identifiant de la requête ($result) retourne l’enregistrement courant sous forme d’un tableau PHP ($row), ou false s’il n’y a plus aucun enregistrement, ce qui a pour effet d’interrompre la boucle while

Le tableau PHP $rowcontient autant d’indexes que de champs sélectionnés. Dans ce cas, il contient deux indexes qui correspondent respectivement au username et au age

Si on veut connaitre le nombre de résultats retournés par la requête de sélection on fait appel à la fonction mysqli_num_rows() comme ceci:

Retour Plan de Cours