MySQL est un serveur de base de données SQL (Structured Query
Language). Il s'agit d'une application client-serveur.
Le
serveur héberge plusieurs bases de données, gére les accès et les
requêtes des clients.
Les clients envoient des demandes sous
forme de requêtes SQL et reçoivent en retour les données stockées sur
le serveur.
Dans notre cas, les clients sont les scripts PHP qui avec des fonctions dédiées vont établir un dialogue et communiquer avec le serveur MySQL.
On travaille dans un environnement 3 tiers, avec en pivot le serveur Web qui a en quelque sorte un double rôle de serveur ET de client :
Le fait qu'il y ait 2 serveurs (1 serveur Web et 1 serveur de bases de données) n'implique pas que l'on doive utiliser 2 ordinateurs. Les 2 logiciels serveur (Apache ou IIS et MySQL) peuvent très bien cohabiter sur le même ordinateur car ils n'utilisent pas les mêmes numéros de port : le serveur Web utilise les ports 80 (HTTP) et/ou 443 (HTTPS), et le serveur MySQL utilise par défaut le port 3306.
Vous trouverez la description des principales caractéristiques techniques de MySQL sur https://dev.mysql.com/doc/refman/5.7/en/introduction.html et dans cet article de wikipedia.
On considère que le langage SQL permet de faire 2 sortes de requêtes sur une base de données :
Pour des raisons évidentes de sécurité il est totalement exclu qu'un script PHP déclenchable depuis Internet par une personne lambda puisse effectuer des requêtes de définition de données sur la base de données de l'application, et encore moins sur les autres bases de données hébergées par le serveur MySQL.
1 Un serveur MySQL est administré par un utilisateur privilégié ("root") qui a tous les droits sur toutes les bases et tous les autres utilisateurs du serveur. |
2 L'utilisateur privilégié ("root") va créer la base de données de l'application et un utilisateur gestionnaire de cette base de données. Cet utilisateur gestionnaire aura tous les droits sur la base de l'application. |
3 L'utilisateur gestionnaire de la base de l'application va créer la structure interne de la base (tables, index). Il va créer aussi un utilisateur "Web" qui aura des droits réduits (SELECT, INSERT, UPDATE, DELETE) sur la base (voir sur certaines tables uniquement). C'est cet utilisateur qui sera employé pour faire toutes les requêtes de l'application depuis PHP. |
|
La manipulation des données à l'intérieur des tables (sélection, suppression, mise à jour...) sont effectuées avec les requêtes suivantes : SELECT, INSERT, UPDATE et DELETE
Pour une liste exhaustive des différentes clauses possibles, voir la documentation officielle.
SELECT : sélectionne et extrait des enregistrements contenus
dans les tables suivant certaines conditions. C'est la requête la
plus souvent employée.
Vous devez utiliser au maximum les possibilités
du langage SQL, et notamment les jointures, pour limiter le nombre de
requêtes envoyées au serveur MySQL : une seule requête (même un peu longue) sera toujours traitée plus rapidement
que plusieurs petites requêtes. En particulier, il faut essayer d'éviter d'envoyer des requêtes
à l'intérieur d'une boucle.
SELECT liste_colonnes
[FROM liste_tables]
[WHERE expression_where]
[GROUP BY liste_colonnes]
[HAVING expression_where]
[ORDER BY {num_colonne | liste_colonnes | formule}
[ASC | DESC] , ...]
[LIMIT [offset, ] nombre]
INSERT : insère des lignes dans la table nom_table
INSERT [INTO] nom_table [(liste_colonnes)] VALUES (expression [, expression] ...)
INSERT [INTO] nom_table SET nom_colonne=expression [, nom_colonne=expression]
INSERT [INTO] nom_table [(liste_colonnes)] SELECT...
UPDATE modifie le contenu des champs des enregistrements de la table nom_table. Les enregistrements modifiés sont définis par la clause WHERE.
UPDATE nom_table SET nom_colonne=expression [, nom_colonne=expression ] ... [WHERE expression_where] [LIMIT n]
DELETE supprime les enregistrements de la table nom_table définis par la clause WHERE..
DELETE FROM nom_table [WHERE condition] [LIMIT n]
Le code PHP est constitué d'un noyau qui peut être étendu avec des extensions optionnelles. Pour travailler avec des systèmes de bases données (MySql, Oracle, MS SQL, DB2, PostgreSQL, etc) PHP va donc utiliser des extensions, écrites spécifiquement pour dialoguer avec tel ou tel SGBD.
Pour MySQL il existe 2 extensions : mysql et mysqli. L'extension mysql est la plus ancienne et a été dépréciée dans les versions récentes de PHP. On lui préfère maintenant l'extension mysqli (i pour improve - améliorée).
L'extension mysqli a la particularité d'être déclinée en 2 versions (ie 2 interfaces):
Dans notre cas, nous travaillerons avec la version procédurale car l'étude de la programmation objet avec PHP sera vue plus loin dans ce tutoriel.
Dans les pages suivantes nous allons utiliser une base de données sur laquelle porteront nos exemples. Cette base de données s'appelle php_tuto et elle est composée de 4 tables stockant des informations sur des livres, leurs auteurs et leurs éditeurs.
Ces livres ne constituent en aucune sorte des références que je vous conseille. Ils sont simplement là pour que nous ayons des données à traiter.
Cette base de données est ultra simpliste pour ne pas compliquer les requêtes que l'on va y faire, le but de ce tutoriel n'étant pas l'étude de SQL. Le schéma relationnel est le suivant :
Les noms des tables et des champs sont suffisamment parlant pour qu'ils se passent de commentaires.
Si vous travaillez sur votre ordinateur personnel il faut créer cette base de données pour que les tests et exemples soient réalisables.