W3docs

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_name est le nom de la table dont vous souhaitez récupérer les données.
  • condition est 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 :

idnameemailcountry
1John[email protected]USA
2Jane[email protected]UK
3Alice[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érateurSignificationExemple
=Égal àcountry = 'USA'
<> ou !=Différent decountry <> 'UK'
>, <, >=, <=Supérieur / inférieur àid >= 2
BETWEENDans une plage inclusiveid BETWEEN 1 AND 3
INCorrespond à une valeur dans une listecountry IN ('USA', 'UK')
LIKECorrespondance de motif (% = n'importe quels caractères, _ = un caractère)email LIKE '%@example.com'
IS NULL / IS NOT NULLTeste les valeurs manquantesemail IS NOT NULL
AND, OR, NOTCombine ou nie des conditionscountry = '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

Pratique

Pratique
Quelle est l'utilité de la clause WHERE dans MySQL en PHP ?
Quelle est l'utilité de la clause WHERE dans MySQL en PHP ?
Was this page helpful?