PHP MySQL Select Where
Apprenez à utiliser la clause WHERE MySQL en PHP pour filtrer les résultats SELECT avec des opérateurs de comparaison et des instructions préparées PDO et MySQLi.
L'instruction SELECT est utilisée pour récupérer des données d'une base de données. La clause WHERE est utilisée pour filtrer les données en fonction de conditions spécifiques. La clause WHERE peut être combinée avec l'instruction SELECT pour ne récupérer que des données spécifiques de la base de données.
Voici la syntaxe de base de l'instruction SELECT avec la clause WHERE :
PHP / SQL syntaxe de base de l'instruction SELECT avec la clause WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;Dans la syntaxe ci-dessus :
column1,column2, ... sont les colonnes dont vous souhaitez récupérer les données.table_nameest le nom de la table dont vous souhaitez récupérer les données.conditionest une expression logique qui détermine quelles données récupérer.
Exemple
Considérez une table nommée customers avec les données suivantes :
| id | name | country | |
|---|---|---|---|
| 1 | John | [email protected] | USA |
| 2 | Jane | [email protected] | UK |
| 3 | Alice | [email protected] | France |
Voici un exemple d'utilisation de l'instruction SELECT avec la clause WHERE pour ne récupérer que des données spécifiques de la table customers :
PHP / SQL exemple d'utilisation de l'instruction SELECT avec la clause WHERE pour ne récupérer que des données spécifiques de la table customers
SELECT name, email
FROM customers
WHERE country = 'USA';L'instruction SELECT ci-dessus ne retournera que les lignes où la colonne country est égale à USA. Le résultat sera :
name | email
----------|----------------------
John | [email protected]Conditions Multiples
Vous pouvez également utiliser plusieurs conditions dans la clause WHERE. Par exemple, vous pouvez récupérer tous les clients de la table customers qui habitent aux USA et dont l'adresse e-mail se termine par example.com.
PHP / SQL récupérer tous les clients de la table customers qui habitent aux USA et dont l'adresse e-mail se termine par example.com
SELECT name, email
FROM customers
WHERE country = 'USA'
AND email LIKE '%example.com';L'instruction SELECT ci-dessus retournera le résultat suivant :
name | email
----------|----------------------
John | [email protected]Vous pouvez utiliser des opérateurs logiques tels que AND et OR pour combiner plusieurs conditions dans la clause WHERE. Lorsque vous les mélangez, encadrez le groupe OR entre parenthèses afin que la priorité soit celle attendue :
SELECT name, email
FROM customers
WHERE country = 'USA'
AND (name = 'John' OR name = 'Alice');Opérateurs de Comparaison et Logiques
La condition dans une clause WHERE est construite à partir d'opérateurs. Voici ceux que vous utiliserez le plus souvent :
| Opérateur | Signification | Exemple |
|---|---|---|
= | Égal à | country = 'USA' |
<> ou != | Différent de | country <> 'UK' |
>, <, >=, <= | Supérieur / inférieur à | id >= 2 |
BETWEEN | Dans une plage inclusive | id BETWEEN 1 AND 3 |
IN | Correspond à une valeur dans une liste | country IN ('USA', 'UK') |
LIKE | Correspondance de motif (% = n'importe quels caractères, _ = un caractère) | email LIKE '%@example.com' |
IS NULL / IS NOT NULL | Teste les valeurs manquantes | email IS NOT NULL |
AND, OR, NOT | Combine ou nie des conditions | country = 'USA' AND id > 1 |
Quelques motifs courants :
-- Match several values without writing OR three times
SELECT name FROM customers WHERE country IN ('USA', 'UK', 'France');
-- Inclusive numeric range
SELECT name FROM customers WHERE id BETWEEN 1 AND 2;
-- Find rows where a value is missing (do NOT use = NULL — that never matches)
SELECT name FROM customers WHERE email IS NULL;Exécuter une Requête WHERE depuis PHP
Le titre de la page est "PHP MySQL", voici donc la partie qui s'exécute réellement en PHP. Étant donné que la valeur du WHERE provient presque toujours d'une saisie utilisateur (un champ de recherche, un paramètre d'URL), vous ne devez jamais la concaténer directement dans la chaîne SQL — cela ouvre la porte aux injections SQL. Utilisez une instruction préparée et liez la valeur en tant que paramètre à la place.
Exemple : filtrage par pays avec une instruction préparée PDO
<?php
$pdo = new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', 'user', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// The user-supplied value never touches the SQL text directly.
$country = $_GET['country'] ?? 'USA';
$stmt = $pdo->prepare('SELECT name, email FROM customers WHERE country = ?');
$stmt->execute([$country]);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
echo $row['name'] . ' - ' . $row['email'] . "\n";
}La même requête avec MySQLi ressemble à ceci :
Exemple : la même requête avec MySQLi
<?php
$conn = new mysqli('localhost', 'user', 'password', 'shop');
$country = $_GET['country'] ?? 'USA';
$stmt = $conn->prepare('SELECT name, email FROM customers WHERE country = ?');
$stmt->bind_param('s', $country); // 's' = the parameter is a string
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['name'] . ' - ' . $row['email'] . "\n";
}Note de sécurité : Filtrez toujours les entrées fournies par l'utilisateur via des paramètres liés (PDO ou MySQLi), jamais en construisant la chaîne SQL avec
"... WHERE country = '$country'". Les instructions préparées maintiennent les données et le code séparés, ce qui empêche les injections SQL.
Sujets Connexes
- PHP MySQL Select — les bases de
SELECTsur lesquelles cette clause s'appuie. - PHP MySQL Order By — trier les lignes retournées par votre clause
WHERE. - PHP MySQL Limit Data — limiter le nombre de lignes filtrées retournées.
- PHP MySQL Prepared Statements — un examen approfondi du modèle sécurisé utilisé ci-dessus.