Leçon 20 : Récupérer des données dans une base de données

Voici le moment de récupérer des données dans notre base de données pour les placer dans nos pages PHP.

C'est vraiment une des leçons les plus importantes dans ce tutoriel. Une fois que vous l'aurez lue et assimilée, vous réaliserez pourquoi les solutions web reposant sur des bases de donnée sont si puissantes, et votre vision du développement web s'élargira prodigieusement.

Les requêtes SQL

Pour récupérer des données dans une base de données, on utilise des requêtes. Comme exemple de requête : « prendre toutes les données de la table 'people' triée alphabétiquement » ou « prendre les noms de la table 'people' ».

On utilise à nouveau le langage SQL (Structured Query Language) pour communiquer avec la base de données. Voyons cet exemple simple :


	Prendre toutes les données dans la table 'people'

	

S'écrira en SQL comme ceci :


	SELECT * FROM people

	

La syntaxe est assez évidente. Lisez ce qui suit et voyez comment employer des déclarations SQL dans les exemples ci-dessous.

Exemple 1 : Récupérer des données dans une table

Cet exemple fait appel à la base de données et à la table de la leçon 19 et de la leçon 18. Il faut donc lire ces leçons d'abord.

L'exemple montre comment récupérer des données dans la table "people" avec une requête SQL.

La requête SQL renvoie un résultat sous la forme d'une suite d'enregistrements. Ces enregistrements sont stockés dans un ensemble d'enregistrements. Un ensemble d'enregistrements peut se décrire comme une sorte de table dans la mémoire du serveur, laquelle table contient des rangées de données (les enregistrements), chaque enregistrement se subdivisant en champs individuels (ou colonnes).

On pourrait comparer un ensemble d'enregistrements à une table dans laquelle chaque enregistrement pourrait être rapporté à une rangée dans la table. Dans PHP, on peut parcourir un ensemble d'enregistrements à l'aide d'une boucle et de la fonction documentationmysql_fetch_array, laquelle renvoie chaque rangée sous forme d'un tableau.

Le code ci-dessous montre comment utiliser documentationmysql_fetch_array pour une itération à travers un ensemble d'enregistrements :


	<html>
	<head>
	<title>Retrieve data from database </title>
	</head>
	<body>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL query
	$strSQL = "SELECT * FROM people";

	// Execute the query (the recordset $rs contains the result)
	$rs = mysql_query($strSQL);

	// Loop the recordset $rs
	// Each row will be made into an array ($row) using mysql_fetch_array
	while($row = mysql_fetch_array($rs)) {

	   // Write the value of the column FirstName (which is now in the array $row)
	  echo $row['FirstName'] . "<br />";

	  }

	// Close the database connection
	mysql_close();
	?>
	</body>
	</html>

	

Remarquez la manière, pour chaque enregistrement, dont nous récupérons le contenu de la colonne "FirstName" en tapant $row['FirstName']. De la même façon, nous pouvons récupérer par exemple le contenu de la colonne "Phone" en écrivant $row['Phone'].

L'ordre de l'ensemble d'enregistrements est exactement le même que celui dans la table dans la base de données. Dans l'exemple suivant, nous montrerons comment trier l'ensemble d'enregistrements.

Exemple 2 : Trier les données alphabétiquement, chronologiquement ou numériquement

Il est souvent pratique qu'une liste ou une table de données soient présentées dans un ordre alphabétique, chronologique ou numérique. De tels tris sont très faciles à réaliser avec SQL ; on utilise la syntaxe Order By nom_de_la_colonne pour trier selon le contenu de la colonne.

Prenez la déclaration SQL de l'exemple précédent :


	strSQL = "SELECT * FROM people"

	

On peut trier les enregistrements, par exemple, de manière alphabétique par le prénom des personnes de cette façon :


	strSQL = "SELECT * FROM people ORDER BY FirstName"

	

Ou de manière chronologique par la date de naissance comme ceci :


	strSQL = "SELECT * FROM people ORDER BY BirthDate"

	

Le tri peut se faire d'un ordre ascendant vers un ordre descendant en ajoutant DESC :


	strSQL = "SELECT * FROM people ORDER BY BirthDate DESC"

	

Dans l'exemple suivant, les personnes sont triées selon leur âge :

	<html>
	<head>

	<title>Retrieve data from database </title>

	</head>
	<body>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL query
	$strSQL = "SELECT * FROM people ORDER BY BirthDate DESC";

	// Execute the query (the recordset $rs contains the result)
	$rs = mysql_query($strSQL);

	// Loop the recordset $rs
	while($row = mysql_fetch_array($rs)) {

	   // Write the value of the column FirstName and BirthDate
	  echo $row['FirstName'] . " " . $row['BirthDate'] . "<br />";

	  }

	// Close the database connection
	mysql_close();
	?>

	</body>
	</html>

	

Essayez à votre tour de modifier la déclaration SQL afin de trier les enregistrements selon le prénom, le nom ou le numéro de téléphone.

Récupérer les données sélectionnées

Jusqu'à présent, notre déclaration SQL récupérait toutes les rangées de la table. Mais il est souvent nécessaire de fixer des critères dans la requête SQL pour les données à récupérer, par exemple, si on ne veut que les rangées des personnes qui ont un numéro de téléphone particulier ou un nom donné.

Disons que nous voulons sélectionner la personne dans la base de données qui a le numéro de téléphone "66554433". On le ferait comme ceci :


	strSQL = "SELECT * FROM people WHERE Phone = '66554433'"

	

Il existe six opérateurs relationnels dans SQL :

= Égal à
< Inférieur à
> Supérieur à
<= Inférieur ou égal à
> = Supérieur ou égal à
!= Non égal à

En outre, il y a quelques opérateurs logiques :

AND
OR
NOT

Voir la leçon 6 pour plus de renseignements sur la manière de fixer des conditions.

Dans l'exemple suivant, nous utilisons des conditions pour créer un carnet d'adresses.

Exemple 3 : Carnet d'adresses

Dans cet exemple, nous essaierons de combiner plusieurs choses tout juste apprises. Nous construirons une liste des noms dans la base de données, chaque nom devenant un lien vers des détails supplémentaires concernant la personne.

Pour cela, nous avons besoin de deux fichiers, list.php et person.php, et du code suivant :

Code de list.php


	<html>
	<head>
	<title>Retrieve data from the database</title>
	</head>
	<body>

	<ul>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL query
	$strSQL = "SELECT * FROM people ORDER BY FirstName DESC";

	// Execute the query (the recordset $rs contains the result)
	$rs = mysql_query($strSQL);

	// Loop the recordset $rs
	while($row = mysql_fetch_array($rs)) {

	   // Name of the person
	  $strName = $row['FirstName'] . " " . $row['LastName'];

	   // Create a link to person.php with the id-value in the URL
	   $strLink = "<a href = 'person.php?id = " . $row['id'] . "'>" . $strNavn . "</a>";

	    // List link
	   echo "<li>" . $strLink . "</li>";

	  }

	// Close the database connection
	mysql_close();
	?>

	</ul>
	</body>
	</html>


	

Code de person.php

	<html>
	<head>
	<title>Retrieve data from database</title>
	</head>
	<body>

	<dl>

	<?php
	// Connect to database server
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Select database
	mysql_select_db("mydatabase") or die(mysql_error());

	// Get data from the database depending on the value of the id in the URL
	$strSQL = "SELECT * FROM people WHERE id=" . $_GET["id"];
	$rs = mysql_query($strSQL);

	// Loop the recordset $rs
	while($row = mysql_fetch_array($rs)) {

		// Write the data of the person
		echo "<dt>Name:</dt><dd>" . $row["FirstName"] . " " . $row["LastName"] . "</dd>";
		echo "<dt>Phone:</dt><dd>" . $row["Phone"] . "</dd>";
		echo "<dt>Birthdate:</dt><dd>" . $row["BirthDate"] . "</dd>";

	}

	// Close the database connection
	mysql_close();
	?>

	</dl>
	<p><a href="list.php">Return to the list</a></p>

	</body>

	</html>

	

L'exemple de carnet d'adresses, plutôt simple, démontre le potentiel du couple PHP et bases de données.

Imaginez que la base de données contienne 10 000 articles et leurs descriptions détaillées. En apportant quelques modifications aux fichiers précédents, vous pourriez aisément créer un catalogue d'articles de plus de 10 000 pages avec juste une seule base de données et deux fichiers PHP.

Bienvenu dans un monde de sites web étendus, faciles à développer et entretenir ! Lorsque vous saurez travailler avec des bases de données, vos solutions web ne seront jamais plus les mêmes.



<< Leçon 19 : Insérer des données dans une base de données

Leçon 21 : Supprimer des données dans une base de données >>