Le site de référence en environnement
et sciences de la Terre depuis 2001

english deutsch
Envoyer cette page
Cours PHP  rss  Plan du site

connexion Se connecter

Login (email)  
Mot de passe mémoriser
 
Devenir membreRetrouver vos identifiants

Plus que 18 jours pour gagner 5 jeux !

Marre de la pub ? Devenez membre premium !

actu21 décembre 2012 : la fin du monde ?
actu"Il est déjà trop tard" : l'espèce humaine devrait s'éteindre ce siècle
actuDémographie : la vraie vérité qui dérange
actuLes abeilles, témoins du bon état de notre environnement, disparaissent massivement
actuUn nouveau "continent" de déchets a été découvert dans l'océan Atlantique Nord !
actuManger autant de viande est une aberration pour l'environnement et la santé
actuLe pic pétrolier mondial : on doit s'y préparer dès maintenant !
actuLimiter l'augmentation de la température planétaire à 2 ºC n'est plus réalisable
actuLe déclin de l'industrie nucléaire
actu7 milliards d'habitants sur Terre
actuPollution de l'air : plus de 2 millions de morts par an

Marre de la pub ? Devenez membre premium !

Sondage Février 2012

Découvrez l'agenda du mois
> > Février 2012 < <

Marre de la pub ? Devenez membre premium !

www.notre-planete.info : environnement, développement durable et sciences de la Terre

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

Requête : 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 : afficher une table, supprimer un enregistrement, mettre à jour un enregistrement, afficher le résultat d'une requête... Il est donc indispensable d'avoir au préalable une bonne connaissance du langage SQL...

Toutes ces actions sont directement effectuées en SQL en exploitant les méthodes de la classe mysqli. Ici on utilisera la méthode PHP query ().
Admettons que nous soyons connectés à notre base de données comme vu précédemment.
Nous souhaitons par exemple afficher tous les enregistrements de la table nommée 'user' pour lesquels le champ intitulé 'nom' est égal à 'Samia' :

<?php
$requete 
"SELECT * FROM user WHERE nom = 'Samia'";
$resultat $mysqli->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 query (), cette requête est ici déclarée avant dans une variable de type chaîne de caractères.
Le raccourci suivant est bien sûr possible :

<?php
$resultat 
$mysqli->query ("SELECT * FROM user WHERE nom = 'Samia'");
?>

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 classe MySQLi_Result nommée $resultat. Ce résultat peut ensuite être exploité via différentes méthodes / fonctions. Nous utiliserons ici la méthode fetch_assoc() comme en témoigne l'exemple ci-dessous :

<?php
$ligne 
$resultat->fetch_assoc();
echo 
'le premier enregistrement a pour utilisateur '.$ligne["user"].' et pour score '.$ligne["score"]; 
?>

Ce qui donnera :

le premier enregistrement a pour utilisateur Samia et pour score 72

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

Exploiter plusieurs 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 dernières actualités du portail notre-planete.info. Voici le code utilisé (en admettant que nous sommes déjà connectés à notre base)

<?php
// on limite à 4 le nombre d'enregistrements souhaité
$requete "SELECT * FROM table_actus ORDER BY champ_date DESC LIMIT 4";
// envoi de la requête
$resultat $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error);

// tant qu'il y a un enregistrement, les instructions dans la boucle s'exécutent
while ($ligne $resultat->fetch_assoc()) {
    
// on convertit la date dans un format lisible
    
$date date"d/m"strtotime($ligne['champ_date']));
    
// mise en place d'un lien sur le titre et ajout dans la variable $news
    
$news .= '<li><strong>'.$date.'</strong><a href="http://www.notre-planete.info/actualites/actualites/actu_'.$ligne['champ_numero'].'.php">'
.$ligne['champ_actu'].'</a></li>';
}
// affichage de la variable $news qui s'est enrichie à chaque passage dans la boucle
echo "<ul>$news</ul>"
?>

Nous constatons que la fonction 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 :

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 ;-)

Compter des enregistrements

Détaillons quelque peu la méthode num_rows() qui permet de compter le nombre d'enregistrements retournés par une requête de sélection. Elle est très utilisée.

Par exemple, nous souhaitons retourner le nombre de photos enregistrées dans les galeries de photos de ce site.

<?php
$requete 
"SELECT num FROM table_photos";
$resultat $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error);
$nombre $resultat->num_rows;
echo 
"$nombre photos disponibles !";
?>

Ce qui nous donnera :

3889 photos disponibles !

Vider la mémoire

Une fois que la requête a été exécutée et les résultats affichés et/ou exploités, il faut libérer la mémoire associée. Ceci se fait grâce à la méthode free_result ou free

<?php
$requete 
"SELECT num FROM table_photos";
$resultat $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error);
$nombre $resultat->num_rows;

// on libère la mémoire
$resultat->free_result;

echo 
"$nombre photos 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é

Contenu du fichier inclus id_connect.inc.php

<?php
$serveur 
"mysql.monserveursql.com";
$base "mabase";
$user "monuser";
$pass "monpass";

$mysqli = new mysqli($serveur$user$pass$base);
if (
$mysqli->connect_error) {
    die(
'Erreur de connexion ('.$mysqli->connect_errno.')'$mysqli->connect_error);
}
?>

Inclusion et requête

<?php
//les actualités seront mises dans un tableau
echo "<table>";
// on se connecte à 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 $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
$n $resultat->num_rows;
for(
$i=0;$i<$n;$i++) {
    
$ligne $resultat->fetch_row();
    
$date date("d/m"strtotime($ligne[2]));
    
$liste .= "<tr><td>";
    if (
$i%2==0)
        
$liste .= ' bgcolor="#eeeeee"';
    
$liste .= '><span style="color:#00216A; font-weight: bold">'.$date.'</span> - <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 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 commençant à 0)

Enfin, voyons comment s'effectuent d'autres types de requêtes sur une base de données : effacement, mise à jour...


Haut de page ^ Offres d'emploi et CV     Livres et DVD     Associations     Communiqués     Agenda     rss Flux RSS     Partenaires

Page mise à jour le 02/12/2011  25 connectés© 2001-2012 notre-planete.info® v. 5.69 - tous droits réservés
notre-planete.info est un site indépendant qui informe et sensibilise objectivement sur l'environnement, l'écologie, les sciences de la Terre et le développement durable
Mentions légales  |   Presse  |   Publicité  |   Contact  |   Liens et logos  |   Soutenez notre-planete.info !