Tutoriel SQL - Premier programme PHP et MySQL

Dans cet exemple on va réaliser un programme qui gère entièrement une base de données minimaliste de démonstration.
On va alors:

  1. Initialiser le système.
  2. Créer une nouvelle base de données.
  3. Créer une table dans cette base.
  4. Ajouter des articles.
  5. Lire un article.
  6. Effacer un article.
  7. Fermer la connexion.

Initialiser le système

Sur un serveur mutualisé

Votre interface d'administration permet de créer une base de données automatiquement. On vous fournit les informations suivantes:

Nom du serveur: quelque chose comme mysql-5-1
Nom de la base de donnée: nom choisi par vous.
Nom d'utilisateur: même nom que la base de donnée.
Mot de passe utilisateur et base de données.

Et pour se connecter au serveur on utilisera une commande de la forme:

$connexion = mysqli_connect('mysql5-1', 'user', 'pass', 'base')

le premier paramètre étant le nom du serveur.

Localement en ligne de commande:

Entrer dans le répertoire mysql/bin (qui peut être contenu dans un serveur local).

mysqld-nt -u user -h server -p name

Ou un executable similaire fourni avec votre configuration.

Avec un serveur local (XAMPP, Easyphp)

Il suffit de se connecter avec le nom d'utilisateur root.

$connexion = mysqli_connect('localhost', 'root');

Cet utilisateur n'a pas besoin de mot de passe.
Le fait de se connecter permet de préparer la création d'une base de donnée et est préalable à toute opération sur cette base de donnée.

Pour un autre utilisateur que root, il faudra donner un mot de passe, la commande aura alors avec un serveur local la forme:

$connexion = mysqli_connect('localhost', 'root', 'passe');

Création d'une base de données

En PHP on utilise la fonction mysql_query pour envoyer la commande CREATE DATABASE au serveur suivie du nom que l'on veut donner à la base de donnée.
Donc avec une commande comme celle-ci:

$command = 'CREATE DATABASE mabase'; 
$results = mysqli_query($connexion, $command);

La variable $connexion est assignée par la commande du paragraphe précédent de connexion à la base de données.

Lancer phpMyAdmin dans le menu de votre serveur local ou dans le panel d'administration de votre hébergement, vous devez maintenant avoir le nom mabase dans la liste des bases de données.
Vous pouvez ignorer les autres bases qui auraient déjà été générées par le système.

Sélection d'une base de données

Le serveur pouvant proposer plusieurs bases de données, l'utilisation après connexion au serveur requiert la selection préalable de la base, ce qui se fait avec cette commande:

mysqli_select_db($connexion, 'mabase'); 

A défaut c'est la dernière base ouverte qui sera utilisée.

Création d'une table

Nous voulons gérer une agence immobilière, et donc nous disposons d'une liste d'appartements, dans différentes ville, et pour chacun un propriétaire et une adresse ainsi que la valeur immoblilère.
La liste des lignes, ce sont les appartements et dans les colonnes on mettra les données pour chacun: code, nom, adresse, valeur.

Appartement Nom Ville Valeur
1 Paltrow Hollywood 12.000
2 Turman Los Angeles 34.000
3 Johansson Miami 28.000

La création de la nouvelle table se fait avec la commande CREATE TABLE de SQL qui a en paramètre le nom des colonnes (en l'occurence appartement, nom, ville, valeur) suivi du format des données.
Quand au format, on utilisera un entier pour le numéro d'appartement, et pour la valeur. Pour les noms et villes, des chaînes de caractère de taille fixe rendront l'accès plus rapide, tandis qu'on aurait plutôt utilisé un texte de taille variable pour un article tel qu'un billet de blog.

On définira comme clé primaire le code d'appartement.

Cela donne la commande SQL suivante pour la table maisons:

CREATE TABLE maisons (appartement INTEGER(3),  nom CHAR(30), 
     ville CHAR(50),  valeur INTEGER(9), PRIMARY KEY(appartement))

La définition du type comprend entre parenthèses le nombre de caractères ou de chiffres maximal. Une chaîne de 30 caractères au plus s'écrit donc CHAR(30).

Pour passer cette commande en PHP, on utilise de nouveau la fonction mysql_query:

$command="CREATE TABLE( etc...)";
$result = mysqli_query($connexion, $command); 

Maintenant, lancer phpMyAdmin et regarder dans la base de données mabase.
Dans le menu à gauche, maisons apparaît sous le nom de la base, cliquez dessus pour voir le détail des champs:

Notez que la clé primaire est soulignée et que ce champ ne peut être null parceque c'est une clé primaire.

Insérer des articles dans une table

La commande SQL INSERT INTO permet d'ajouter des lignes à la table. Le format est le suivant:

INSERT INTO nomtable(...liste colonnes...) VALUES(...liste valeurs...)

Les valeurs correspondent aux colonnes.
Pour notre exemple, la première ligne de la table peut être ajoutée avec la commande:

INSERT INTO maisons(appartement, nom, ville, valeur) 
     VALUES(1, 'Paltrow', 'Hollywood', 12000)

Noter que les champs textuels sont entre guillemets contrairement aux nombres.

Une fois les trois lignes ajoutées, retourner à phpMyAdmin, cliquer sur le nom de la table puis sur afficher. Regardez en bas, vous devez avoir ce tableau:

Lire le contenu d'un article dans la base

La commande SELECT est la fonction la plus élaborée dans SQL, mais dans ce chapitre d'introduction on n'utilisera que la fonctionnalité la plus basique. Pour lire un champ dans une table, on donnera une condition, par exemple le numéro d'un appartement. On pourrait faire des recherches sur les autres champs bien sûr.

SELECT * FROM nomtable WHERE condition

La commande mysql_query dans le cas présent retourne un numéro de ressource, tandis qu'elle retourne true quand l'opération est un succès dans les autres cas. Si la requête échoue, elle retourne false dans tous les cas.

Le code PHP sera le suivant:

$command="SELECT * FROM maisons WHERE appartement = 2";
$result = mysqli_query($connexion, $command); 

Il faut alors utiliser le numéro de ressource assigné à $result pour récupérer la ligne grâce à la fonction PHP mysql_fetch_row, qui retourne un tableau:

mysqli_fetch_row($results)

L'opération doit afficher le contenu d'un tableau correspondant à la deuxième ligne du tableau.

Effacer un article

Cela se fait avec une condition similaire à celle de la lecture, et avec la commande DELETE:

DELETE FROM nomtable WHERE condition

En PHP:

$command = "DELETE FROM maisons WHERE appartement = 3";
mysqli_query($connexion, $command);

Vérifiez avec phpMyAdmin et la commande afficher que la troisième ligne a été supprimée.

Fermer la connexion

Cela se fait automatiquement à la fin du script ou par un appel à la fonction mysql_close:

mysqli_close($connexion);

Conclusion

Pour utiliser SQL avec PHP, nous avons utilisé les fonctions suivantes:

  1. mysqli_connect: se connecter.
  2. mysqli_select_db: choisir la base.
  3. mysqli_query: passer une commande.
  4. mysqli_fetch_row: obtenir une ligne de la table selon le numéro de ressource.
  5. mysqli_error: connaître les messages d'erreur éventuels.
  6. mysqli_close: fermer la connexion.

Le reste est dans la syntaxe du langage SQL.

Sources des programmes

Changer l'extension en PHP pour exécuter les scripts ou télécharger les sources SQL en PHP/MySQL.