oujood.com

Tutoriel pratique : Filtrer les données avec la clause WHERE en PHP MySQL

Découvrez comment utiliser la clause WHERE en PHP MySQL pour filtrer et sélectionner des enregistrements spécifiques dans votre base de données. Suivez notre tutoriel pratique avec des exemples détaillés
Jusqu’à présent dans ce didacticiel, vous avez appris comment créer une base de données et la table, insérer les informations et afficher les informations de la base de données.
Dans cette partie, nous allons aprendre une autre façon de récuperation et d'affichage des l'informations d'une la base de données.

chercher |

Filtrage des données La clause WHERE

Dans le chapitre précédent nous avons vu la commande SQL SELECT pour récupérer les données de la table MySQL.
Nous pouvons utiliser la clause conditionnelle appelé WHERE pour filtrer les résultats.La clause WHERE est employée pour filtrer des enregistrements.

La clause WHERE


Sélection directe


Le mot clé WHERE est employée pour extraire uniquement des enregistrements qui remplissent un critère spécifique.



Syntaxe
SELECT nom_colonne(s)FROM nom_table WHERE nom_colonne opérateur valeur

1- Séléction et filtrage des données en utilisant MySQLi orienté objet

L'exemple suivant choisit les rangées à partir de la table "visiteurs" quand "id" est superieur à 5 inferieur à 10 
Donc seuls les enregistrements dont le id est: 6, 7, 8, et 9 serons séléctionés


Exemple :       Copier le code


<!DOCTYPE html>
<html>
<body>

<?php
echo "<table style='border: solid 1px black;border-collapse: collapse;'>";
echo "<tr><th style='width:70px;border:1px solid black;'>Id</th><th style='width:70px;border:1px solid black;'>Prénom</th><th style='width:70px;border:1px solid black;'>Nom</th></tr>";

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifier la connexion
if ($conn->connect_error) {
  die("La Connexion a échoué:: " . $conn->connect_error);
}

$sql = "SELECT id, prenom, nom FROM visiteurs WHERE id<10 AND id>5";
  $result = $conn->query($sql);

if ($result->num_rows > 0) {
  
  while($row = $result->fetch_assoc()) {
    echo "<tr><td style='width:70px;border:1px solid black;'> " . $row["id"]. " </td><td style='width:70px;border:1px solid black;'> " . $row["prenom"]. " </td><td style='width:70px;border:1px solid black;'> " . $row["nom"]. "</td></tr>";
  }
} else {
  echo "0 results";
}
$conn->close();
echo "</table>";

?>
</body>
</html>
  }?> 

Explication des lignes de code à partir de l'exemple ci-dessus :

Tout d'abord, nous configurons la requête SQL qui sélectionne les colonnes id, nom et prenom de la table visiteurs où le id est compris entre 5 et 10. La ligne de code suivante exécute la requête et place les données résultantes dans une variable appelée $result.
Ensuite, la fonction num_rows() vérifie si le nombre de lignes retournées est supérieur à zéro.
Si le nombre de lignes retournées est supérieur à zéro, la fonction fetch_assoc() place tous les résultats dans un tableau associatif que nous pouvons parcourir en boucle. La boucle while() parcourt l'ensemble des résultats et affiche les données des colonnes id,nom et prenom dans une table html.

Note :
Il faut savoir que le mot clé WHERE peut être utilisé avec les requêtes SELECT, DELETE et UPDATE (son utilisation est cumulative grâce aux opérateurs AND ou OR).

Séléction et filtrage des données en utilisant MySQLi procédurale

L'exemple suivant montre la même chose que l'exemple ci-dessus pour les id inferieur à 5 ou superieur à 10, de manière procédurale avec MySQLi :

Code php

  Copier le code

<!DOCTYPE html>
<html>
<body>

<?php
echo "<table style='border: solid 1px black;border-collapse: collapse;'>";
echo "<tr><th style='width:70px;border:1px solid black;'>Id</th><th style='width:70px;border:1px solid black;'>Prénom</th><th style='width:70px;border:1px solid black;'>Nom</th></tr>";

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Créer une connexion
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Vérifier la connexion
if (!$conn) {
  die("La Connexion a échoué: " . mysqli_connect_error());
}

$sql = "SELECT id, prenom, nom FROM visiteurs WHERE id<5 OR id>10";
  $result = mysqli_query($conn, $sql);


if (mysqli_num_rows($result) > 0) {

  while($row = mysqli_fetch_assoc($result)) {
    echo "<tr><td style='width:70px;border:1px solid black;'> " . $row["id"]. " </td><td style='width:70px;border:1px solid black;'> " . $row["prenom"]. " </td><td style='width:70px;border:1px solid black;'> " . $row["nom"]. "</td></tr>";
  }
} else {
  echo "0 results";
}
mysqli_close($conn);
echo "</table>";

?>
</body>
</html>

Sélectionner des données avec PDO et des requêtes préparées (Prepared Statements)

L'exemple suivant utilise les requêtes préparées. Il sélectionne les colonnes id, nom et prenom de la table visiteurs où l'age est inferieur à 30, et les affiche dans une table HTML :

Code php

  Copier le code

<!DOCTYPE html>
<html>
<body>

<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th style='width:70px;border:1px solid black;'>Id</th><th style='width:70px;border:1px solid black;'>Prénom</th><th style='width:70px;border:1px solid black;'>Nom</th><th style='width:70px;border:1px solid black;'>Age</th></tr>";

class TableRows extends RecursiveIteratorIterator {
  function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
  }

  function current() {
    return "<td style='width:70px;border:1px solid black;'>" . parent::current(). "</td>";
  }

  function beginChildren() {
    echo "<tr>";
  }

  function endChildren() {
    echo "</tr>" . "\n";
  }
}

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("SELECT id, prenom, nom, age FROM visiteurs WHERE age<30");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
    echo $v;
  }
}
catch(PDOException $e) {
  echo "Erreur: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
</body>
</html>

Le mot clé LIKE


Le mot clé LIKE utilisé avec le WHERE va vous permettre de faire une sélection "approximative" dans vos tables, par exemple ici vous voulez tous les livres dont le titre commence par 'bo' ou par 'b'.



Exemple :       Copier le code


SELECT * FROM Livres WHERE Titre LIKE 'bo%';

Ou encors par exemple ici vous voulez tous les livres dont le titre commence par 'b'.

Exemple :       Copier le code


SELECT * FROM Livres WHERE titre LIKE 'b_';
Pour placer un seul caractère dans un LIKE il faut utiliser _, pour remplacer une chaîne de caractère il faut utiliser %. Le LIKE ne respecte pas la casse (minuscule - majuscule) contrairement à égal.

Sélection selon une liste de valeur



Ici nous allons voir un mot clé permettant de faire la sélection à partir d'une liste de valeur.Le WHERE est ici utilisé avec un IN.

Exemple :       Copier le code


SELECT * FROM Livres WHERE Prix IN (40, 50, 60);
Le mot clé IN permet de sélectionner les enregistrements dans la table Livres où le prix est de 40, 50 ou 60.

Sélection selon une plage de valeurs


Nous allons utiliser le WHERE et le BETWEEN...AND qui permet de faire une sélection en précisant une plage de données,
ce mot clé n'est utilisé qu'avec des valeurs "numériques" (integer, date...).

Exemple :       Copier le code


SELECT * FROM Livres WHERE Prix BETWEEN 40 AND 50;

Sécurité

À ce stade il est à noter que vous devez faire très attention en utilisant la technique ci-dessus.Sans mesures de sécurité correcte, il serait très facile pour une personne à accéder aux données sur votre serveur, ou même apporter des modifications à la base de données.Cela peut se produire si l'utilisateur définit la variable à une valeur qui modifie la chaîne SQL générée de manière à ce qu'il peut être utilisé pour leurs propres fins.Je n'entrerai pas dans tous les détails ici.


Par carabde 20 Aout 2014



Voir aussi nos tutoriel :

fonction strspn, strspn

Trouve la longueur du premier segment d'une chaîne contenant tous les caractères d'un masque donnée

margin

Définit toutes les propriétés de marge dans une déclaration

border-bottom-width

Définit la largeur de la bordure inférieure