YBET

Rue Albert 1er, 7

6810 Pin - Chiny

Route Arlon - Florenville

(/fax: 061/32.00.15

Les formations sur Internet

YBET   Créer son site Contact

9. Gérer une base de donnée MySQL avec le langage PHP

1. Principe - 2. Commandes MySQL - 3. Commandes PHP pour gérer la base de donnée MySQL.

Dans le précédant chapitre de ce cours Webmaster, nous avons créé une base de donnée MYSQL et une table manuellement avec PHPMyADMIN. Nous aurions également pu rentrer des données ou modifier des données existantes mais un hébergement Internet ne permet pas d'utiliser directement l'administration (sauf en utilisant un serveur dédié). Vous devez gérer les bases de données MySql (et les tables) à l'aide de programmes écrits dans le langage PHP. Cette partie va reprendre les commandes nécessaires. L'ensemble des parties suivantes peut se faire en local (en démarrant EasyPhp ou Wampserver) ou sur un site Internet existant.

1. Principe.

Pour utiliser une base de donnée écrite en MySQL, il faut:

  1. Connexion au serveur
    Création d'une ressource
    Authentification
    Sélection de la base de donnée
  2. Utilisation des tables MySQL (via PHP)
    Lecture
    Ecriture
    Modification
  3. Déconnexion du serveur
Toutes les fonctions PHP pour gérer une base ou une table MySQL commencent par mysql_.

La connexion au serveur se fait par la commande: mysql_connect($serveur,$login,$mot-passe). Dans le cas d'une base de donnée créée avec EasyPhp, par défaut, le serveur est localhost, le login est root, mot de passe vide. Pour une base de donnée hébergée sur un serveur Internet, ces paramètres sont fournis par votre hébergeur.

La fonction mysql_connect() renvoie une ressource si la connexion a réussie, sinon, elle renvoie le message d'erreur False. Une fois que la ressource est établie, elle est sauvegardée et utilisable par les autres fonctions utilisant la base de donnée. Par défaut, le script PHP utilise la dernière connexion ouverte. Cette commande ne doit donc être utilisée qu'une seule fois.

Pour fermer la connexion, la commande à utiliser est mysql_close.

Exemple de connexion:

  • <?php
  • if(!mysql_connect('localhost','root')){
  •  Echo 'Connexion Impossible';
  •  exit();
  • } else{
  •  Echo 'Connexion réussie';
  • }
  • // instructions et requêtes sur la base de donnée
  • mysql_close();
  • ?>

Dans le script ci-dessus, le programme PHP affichera Connexion impossible si la connexion à la base de donnée échoue. Si elle est établie, PHP affichera "Connexion réussie". La fonction Exit() (ou son équivalente die("Message")) permet d'arrêter le script si la connexion n'est pas réussie.

L'étape suivante va sélectionner la base de donnée que nous avons créé.

Mysql_select_db('ybet') sélectionne la base de données (DB) YBET que nous avons créé au chapitre précédant manuellement. Les tables sont elles sélectionnées dans la requête.

2. Commandes MySQL

C'est maintenant que ça va se compliquer. MySQL est une véritable base de donnée qui travaille par requêtes (interrogations des tables). PHP ne va servir que comme application client pour envoyer ces requêtes. La première partie est donc de créer les requêtes en SQL et de les transférer ensuite par PHP. En gros, on va créer une variable en PHP qui reprend la ligne de commande. Comme le but de ce tutorial n'est pas de créer des applications SQL, mais bien d'utiliser les bases de données via une interface PHP, la suite explique quelque commandes utiles que nous transférerons par PHP ensuite

2.1 Requête d'insertion

Il y a plusieurs méthodes de rentrer des données (d'insérer). Toutes utilisent la commande INSERT nom_table. Différentes options sont également proposées.

1. Une liste de colonnes et une liste de valeurs : Insert nom_table(nom colonne 1,nom colonne 2) Values(valeur colonne 1,valeur colonne 2)

Dans notre cas, la table MySQL s'appelle annonce avec comme nom de champs code et titre (remarque: SQL ne fait pas de distinctions majuscules / minuscules dans les nom des champs. La commande SQL est par exemple: Insert annonce(code,TITRE) Values("users0001","Maison à Vendre Pin").

2. Une liste de valeurs noms - valeurs: INSERT nom_table SET nom colonne1=valeur1, nom colonne 2=valeur 2, ...

INSERT annonce SET code='users0003',titre='magasin informatique YBET'

2.2. Sélectionner la base de donnée.

Use nom_base_ donnée permet de sélectionner une base de donnée par défaut. Sans cette commande, vous pouvez dans certaines fonctions nommer la table comme: base.table

2.3. Sélection d'enregistrements

La commande SELECT permet de sélectionner des enregistrements dans une table. Sa syntaxe complète est 

SELECT [distinct] liste_colonne FROM table

[WHERE definition]

[ORDER BY [ASC | DESC], ...]

[Limit [offset,] lignes]

La version la plus simple: Select Liste_colonne FROM table permet de sélectionner seulement les champs repris dans liste_colonne. Par exemple, SELECT nom,prenom FROM utilisateur.

Si vous n'avez pas utilisé la commande USE pour sélectionner la base de donnée lors de la connexion au serveur, vous pouvez la désigner par Select Liste_colonne FROM base.table

Pour sélectionner toutes les colonnes, utilisez la commande SELECT * From TABLE

L'option Where permet de filtrer les enregistrements.

Select * FROM table Where Titre='YBET' sélectionne tous les enregistrements ou le champ titre est égal à YBET dans la table "table".

Vous pouvez utiliser les opérateurs de comparaison suivants pour la condition.

! Fonction logique Non, inverse
|| Fonction logique OU (OR)
&& Fonction logique ET, toutes les conditions doivent être remplies (AND)
= égal
<> ou != Différent
<= Inférieur ou égal
>= Supérieur ou égal
> Supérieur
< Inférieur
Like permet de prendre le mot à l'intérieur de la chaîne. % remplace n'importe quel nombre de caractères, y compris 0. _ remplace 1 seul caractère.

ORDER BY permet de trier les résultats de la requête MySQL.

Select * FROM table ORDER BY code récupère tous les enregistrements de la table et les trie suivant le code. Par défaut, le tri est par ordre croissant (ou avec l'option ASC). Pour trier par ordre décroissant, utiliser ORDER BY DESC

LIMIT permet de limiter le nombre de lignes renvoyées, par exemple LIMIT 50 limite aux 50 premiers résultats. Vous pouvez également utiliser 2 arguments, par exemple LIMIT 2,20. Le 2 spécifie de ne pas prendre les 2 premières lignes, mais les 20 suivantes.

2.4. Modification d'enregistrements.

La commande SQL Update permet de modifier le contenu d'un enregistrement. La syntaxe complète est:

UPDATE nom_table SET nom_colonne1=contenu1, [nom_colonne2=contenu2, ...]

[WHERE conditions]

[LIMIT]

Les options Where et Limit sont équivalentes à celles ci-dessus. Vous pouvez également incrémenter directement une valeur. 

Par exemple: UPDATE annonce SET code, code+1 incrémente le code de 1

UPDATE annonce SET code, code*2 multiplie le code par 2

La commande UPDATE renvoie automatiquement le nombre de colonnes qui ont été modifiées.

2.5. Effacement d'enregistrements

Cette fonction se fait par la commande DELETE.

La commande complète est de type: DELETE FROM table [WHERE condition] [LIMIT]

3. Liaison MySQL - PHP

L'envoie de commandes MySQL par un programme php se fait à l'aide de la commande mysql_query($requête SQL). La première partie est donc l'enregistrement de la requête dans une variable. La deuxième est l'envoi de la variable.

En cas d'erreur, la fonction mysql_query($requête) renvoie la valeur FALSE. Pour récupérer le message d'erreur, on utilise la commande SQL mysql_error(). Ceci va nous amener à modifier immédiatement notre scritp PHP.

3.1. Sélection de la base de donnée

Pour pouvoir accéder aux données d'une table, vous devez sélectionner la base de donnée au préalable par la commande:

Mysql_select_db(nom_base);

4.2. Insertion de données dans une table

Nous allons adapter les requêtes SQL sous forme d'une valeur pour la transmettre comme variable à la base de donnée. Les données à insérer doivent être entourées de simples guillemets, y compris les variables PHP. L'utilisation de variables sous formes de tableaux est déconseillée.

  • <?php
  • if(!mysql_connect('localhost','root')){
  • Echo'Connection Impossible';
  • exit();
  • } else{
  • Echo'Connexion réussie';
  • }
  • Mysql_select_db('ybet');
  • $requete="Insert annonce(code,TITRE) Values('users0002','Maison à Vendre Florenville')";
  • $valeur=mysql_query($requete);
  • $erreur=mysql_error();
  • print($erreur);
  • ?>

Analysons ces lignes de commandes. La première partie vue plus haut nous permet de nous connecter à la base de donnée YBET.

Nous allouons ensuite à la variable $requete la valeur de la requête SQL d'insertion qui transmet la valeur users0002 au champ code et la valeur Maison à vendre Florenville au champ TITRE.

La commande suivante va transférer la requête via la commande mysql_query et retourner une valeur à la variable PHP $erreur (True ou False).

Dans le cas d'erreur, la fonction mysql_error() renvoie le message d'erreur que nous affichons à l'écran par la commande Print, la variable $valeur ne renvoie rien (false, comme la requête n'a pas été exécutée). Dans le cas où la requête s'est bien passée, la variable $valeur renvoit 1 (True) et $erreur, rien. Nous n'affichons donc que $erreur, la seule intéressante.

Dans le cas où nous utilisons la commande INSERT table SET colonne1=valeur1, colonne2=valeur2, le script PHP est presque identique. La fonction SET est insérée dans la même ligne.

<?php
if(!mysql_connect('localhost','root')){
Echo'Connection Impossible';
exit();
} else{
Echo'Connexion réussie';
}
Mysql_select_db('ybet');
$requete="INSERT annonce SET code='users0004', TITRE='magasin informatique YBET'";
$valeur =mysql_query($requete);
$erreur=mysql_error();
print($erreur);
?>

3.3. Recherches d'enregistrements

La requête SQL associée est SELECT FROM. Dans le cas de la fonction mysql_query(), la réponse est la valeur trouvée. Reprenons les enregistrements insérés ci-dessus et affichons les enregistrements

N'affichera rien, tout simplement parce que notre table contient effectivement des valeurs mais nous demandons d'afficher en fait 2 variables (puisque la table contient les champs code ET titre). $valeur, le résultat de la commande mysql_query($requete) est une matrice (une variable tableau).

La commande utilisée est finalement mysql_fetch_array($valeur) qui va créer un table reprenant chaque fois les noms des colonnes. Lorsqu'il ne reste plus de lignes à lire, mysql_fetch_array() retourne FALSE. Le script PHP devient:

<?php
// ouverture de la base de donnée
$requete="SELECT * FROM annonce WHERE code='users0004'";
$valeur=mysql_query($requete);
print(mysql_error());
$tableau =mysql_fetch_array($valeur);
print($tableau['code']);
print($tableau['TITRE']);
mysql_close()
?>

Ce script ne fonctionne que s'il n'y a qu'une seule ligne correspondant à notre filtrage. La solution passe par la commande WHILE qui va faire tourner cette fonction en boucle tant que des données sont transmises.

La commande mysql_num_rows() permet de connaître le nombre de lignes affichées (mysql_affected_rows(), identique, est utilisée pour les requêtes d'effacement ou de modification d'enregistrement). En utilisant la commande en bouche WHILE:

<?php
if(!mysql_connect('localhost','root')){
    Echo'Connection Impossible<br>';
    exit(); } else{     Echo'Connexion réussie <br>';
}
Mysql_select_db('ybet');
$requete="SELECT * FROM annonce WHERE code='users0004'";
$valeur=mysql_query($requete);
print(mysql_num_rows($valeur).' ligne(s)<br>');
while ($tableau =mysql_fetch_array($valeur)){
    print("<b>".$tableau["code"]."<br>".$tableau["TITRE"]."</b>\n");
}
mysql_close()
?>

Voici le résultat dans notre base de donnée actuelle

Connexion réussie
1 ligne(s)
users0004
magasin informatique YBET

Sur le sujet:

Les balises META et leur utilisation dans les pages internet

Le fichier Apache .htaccess, configuration serveur, URL Rewriting, accès répertoires.

Résumé des commandes MySQL

> 10. Gérer les tables MYSQL automatiquement
< 8 . Créer une base de donnée avec EASYPHP

Mise en ligne: 08/03/2006 - modifié le 22/12/2008