Accueil
 COURS INFORMATIQUE
 Cours Algorithmique
 Cours ASP
 Cours CSS
 Cours HTML
 Cours PHP / MySQL
 Cours Réseaux
 Cours SQL
 Cours Visual Basic
 ARTICLES
  Conception de sites
  Droit & Internet
  e-commerce
  Société
  Strategies du web
  Technologies Web
  Marketing Web
 LIVRES
  ASP/ASP.Net
  C/C++/C#
  Conception de sites
  DHTML/CSS
  Gestion de Projet
  HTML/Internet
  Java/JSP/J2EE
  JavaScript/VbScript
  Juridique
  Marketing/Stratégie
  PHP/Linux/Unix
  Réseaux
  XML/XHTML/XSL
 NETALYA RECOMMANDE
Reussir un projet de site web
Cours PHP-MySQL N°8 : requêtes sur les bases de données
Auteur : Frédéric Jacquenod
Adaptation : Christophe Magdelaine

Infinite Menus, Copyright 2006, OpenCube Inc. All Rights Reserved.

Effectuer des requêtes sur la base de données MySQL

Fonctionnement : cas de la clause SELECT

Une fois que nous sommes connectés à MySQL et à une base de données, nous pouvons effectuer des tâches classiques dans un SGBD : ajouter une table, supprimer un enregistrement, mettre à jour un enregistrement, afficher le résultat d'une requête...
Toutes ces actions sont directement effectuées en SQL via une requête appropriée et l'utilisation de la fonction PHP mysql_query (). Il est donc indispensable d'avoir au préalable une bonne connaissance du langage SQL...
Admettons que nous soyons connectés à notre base de données comme vu précedemment.
Nous souhaitons par exemple afficher tous les enregistrements de la table nommée 'table' pour lesquels le champ intitulé 'champ_id' est égal à 'notre-planete.info' :

$requete = "SELECT * FROM table WHERE champ_id = 'notre-planete.info'";
$resultat = mysql_query ($requete);

Cet exemple suffit pour comprendre comment PHP s'interface avec MySQL : une requête SQL est passée en argument de la fonction mysql_query (), cette requête est ici déclarée avant dans une variable de type chaîne de caractères.
De la même façon, on pourrait effectuer une requête de suppression, d'ajout...

Récupérer un enregistrement avec la clause SELECT

Notons que le résultat de la requête se trouve dans la variable nommée $res. Ce résultat peut ensuite être exploité comme en témoigne l'exemple ci-dessous :

$ligne = mysql_fetch_assoc($resultat);
echo 'le premier enregistrement a pour id '.$ligne["id"].' et pour type '.$ligne["type"];

Ce qui donnera :

le premier enregistrement a pour id notre-planete.info et pour type site Internet

Pour récupérer les valeurs des champs d'un enregistrement, on utilise donc la fonction mysql_fetch_assoc() qui retourne l'enregistrement en cours sous la forme d'un tableau associatif.

Exploiter plusiquers enregistrements avec la clause SELECT

En effet, si notre requête retourne plusieurs enregistrements, il suffit d'effectuer une boucle while qui lira tous les enregistrements jusqu'au dernier pour affichage, exploitation...
Nous prendrons ici l'exemple de l'affichage des 4 premières actualités du portail notre-planete.info présentes en page d'accueil du site. Voici le code utilisé (en admettant que nous sommes déjà connectés à notre base)

$requete = "SELECT * FROM table_actualites ORDER BY champ_date DESC LIMIT 4"; // on limite à 4 le nombre d'enregistrements souhaité
// envoi de la requête
$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());

// tant qu'il y a un enregistrement, les instructions dans la boucle s'exécutent
while ($ligne = mysql_fetch_assoc($resultat)) {
  $date = date( "d/m", strtotime($ligne['champ_date'])); // on convertit la date dans un format lisible
  $news .= '<br /><font color="#0000ff"><b>'.$date.'</b></font> <a href="http://www.notre-planete.info/actualites/actualites/actu_'.$ligne['champ_numero'].'.php">'.$ligne['champ_actu'].'</a>'; // mise en place d'un lien sur le titre et ajout dans la variable $news
}

echo $news; // affichage de la variable $news qui s'est enrichie à chaque passage dans la boucle d'une actualité

Nous constatons que la fonction mysql_fetch_assoc() permet de récupérer les valeurs de l'enregistrement en cours tout en passant au suivant une fois la fonction appelée. C'est à dire qu'il n'est pas utile (comme en ASP par exemple) d'indiquer que l'on souhaite maintenant lire le prochain enregistrement, ils sont lus séquentiellement.
Notons qu'il n'est pas possible de "revenir en arrière", au premier enregistrement à lire avec cette méthode. Le résultat sera le suivant :

04/02 De l'électricité à partir de la pression atmosphérique
03/02 L’effet de serre à la lumière de l’histoire géologique
02/02 Journée mondiale des zones humides
01/02 Les poissons de la Baltique trop toxiques pour être vendus en Europe

Avec ces quelques fonctions, nous sommes donc capables d'interfacer facilement PHP avec MySQL, les limites étant celles de vos connaissances en algo et en MySQL ;-)

Les principales fonctions MySQL en PHP

FonctionDescription
mysql_close()ferme la connexion MySQL
mysql_connect()ouvre une connexion à un serveur MySQL
mysql_error()renvoie l'erreur MySQL rencontrée
mysql_fetch_array()retourne une ligne de résultat sous la forme d'un tableau associatif
mysql_fetch_assoc()lit une ligne de résultat dans un tableau associatif
mysql_fetch_row()découpe une ligne de résultat en un tableau
mysql_free_result()libère la mémoire du résultat de la dernière requête
mysql_num_rows()renvoie le nombre d'enregistrements résultants d'une requête de type SELECT
mysql_query()envoie une requête SQL
mysql_select_db()sélectionne une base de données MySQL


les fonctions ci-dessus ont été sélectionnées pour leur emploi courant dans les requêtes aux bases MySQL. Vous trouverez plus de détails sur leurs fonctionnalités sur le site officiel PHP Hypertext Preprocessor où toutes les fonctions PHP sont expliquées et commentées en français :-)

Détaillons quelque peu la fonction mysql_num_rows() qui permet de compter le nombre d'enregistrements retournés par une requête de sélection pour mentionner par exemple le nombre de photos de phénomènes naturels disponibles sur le portail notre-planete.info

$requete = "SELECT * FROM table_photos WHERE champ_categorie='phenomenes_naturels'";
$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());
$nombre = mysql_num_rows($resultat);
echo $nombre.' photos de phénomènes naturels disponibles !';

Ce qui nous donnera :

105 photos de phénomènes naturels disponibles !

Récapitulons : se connecter et effectuer une requête

Prenons l'exemple d'une visualisation de toutes les actualités en environnement de l'année en cours sur le portail notre-planete.info
Nous choisirons ici de privilégier l'inclusion du fichier contenant les identifiants pour se connecter à la base de données, pour les raisons évoquées précedemment

Contenu du fichier id_connect.inc.php :

$serveur = "mysql.netalya.com";
$nom_base = "coursPHP";
$login = "cours";
$motdepasse = "php";
mysql_connect ($serveur,$login,$pwd) or die ('ERREUR '.mysql_error());

Inclusion et requête :

echo '<table>'; //les actualités seront mises dans un tableau
// on récupère les identifiants de connexion à la base de données via l'inclusion du fichier id_connect.inc.php
include ($_SERVER["DOCUMENT_ROOT"]."/inc/id_connect.inc.php");

$annee = 2005; //annee souhaitée
$rubrique = "environnement"; //rubrique affichée

//requête de sélection
$requete = "SELECT * FROM champ_actualites WHERE categorie='$rubrique' AND YEAR(date)=$annee ORDER BY date DESC";
$resultat = mysql_query($requete) or die ('Erreur '.$requete.' '.mysql_error());
$n = mysql_num_rows($resultat);
for($i=0;$i<$n;$i++) {
  $ligne = mysql_fetch_row($resultat);
  $date = date("d/m", strtotime($ligne[2]));
  $liste .= '<tr><td';
  if ($i%2==0)
     $liste .= ' bgcolor="#eeeeee"';
  $liste .= '><font color="#00216A"><b>'.$date.'</b></font> - <a href="actu_'.$ligne[0].'.php">'.$ligne[4].'</a></td></tr>';
}

echo $liste.'</table>';

Cet exemple complet introduit de nouveaux éléments :
  • on peut directement insérer des variables PHP dans la requête ce qui nous donne plus de souplesse avec des requêtes dynamiques qui peuvent par exemple prendre en compte une préférence utilisateur via un formulaire
  • l'utilisation de la fonction mysql_fetch_row retourne les valeurs de l'enregistrement en cours sous forme d'un tableau indexé avec des nombres. A ce titre, si dans la structure de notre table le premier champ est le "numéro" de l'actualité, on le récupérera via la variable "$ligne[0]" (les indices commencant à 0)
Enfin, voyons comment s'effectuent d'autres types de requêtes sur une base de données : effacement, mise à jour...

Nous vous informons que ce cours constitue une œuvre protégée en France par le Code de la Propriété Intellectuelle, et à l’étranger par les conventions internationales en vigueur sur le droit d’auteur. La violation de l’un des droits d’auteur de l’œuvre est un délit de contrefaçon. Il est donc interdit, à titre privé ou public, de reproduire, copier, vendre, revendre ou exploiter, que ce soit dans un but commercial ou purement gratuit, ce cours, sauf accord exprès et préalable de son auteur.


Google
 
 RESSOURCES GRATUITES
 Caractères spéciaux
 Code Couleurs HTML
 Compresseur images
 Générateur Méta Tags
 Références HTML
 Scripts : ASP
 Scripts : Java Scripts
 PRATIQUE / OUTILS
 Salons Informatiques
 Astuces Windows
 Offres d'Emploi Web
 Syndication Contenu
 TÉLÉCHARGEMENTS
 Utilitaires système
 Logiciels pratiques
 Jeux & démos
 INFOS SITE
 Contacts
 Mentions légales
 NewsList
 Qui sommes-nous ?
 PARTENAIRES
 Jeux et Jouets
 Murielle Cahen
 Cours d'anglais
 Droit NTIC
 Directeur Internet
 Australie
 Création site Internet